17.00 - 17.05 - 例: 基本的なスカラー関数 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Published
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1147-170K-JPN
Language
日本語 (日本)

入力文字列から、指定された開始位置から始まる部分文字列を取り出すスカラー関数の例を、以下に示します。 このスカラー関数では、パラメータ スタイルSQLを使用します。

/*****  C source file name: substr.c  *****/
#define  SQL_TEXT Latin_Text
#include <sqltypes_td.h>
#include <string.h>
#define  IsNull     -1
#define  IsNotNull  0
void udf_scalar_substr( VARCHAR_LATIN *inputString,
                        INTEGER       *start,
                        VARCHAR_LATIN *result,
                        int           *inputStringIsNull,
                        int           *startIsNull,
                        int           *resultIsNull,
                        char          sqlstate[6],
                        SQL_TEXT      extname[129],
                        SQL_TEXT      specific_name[129],
                        SQL_TEXT      error_message[257] )
{
   int inputStrLength;
   /* Return Null value on Null Input */
   if ((*inputStringIsNull == IsNull))
   {
      strcpy(sqlstate, "22004");
      strcpy((char *) error_message, "Null value not allowed.");
      *resultIsNull = IsNull;
      return;
   }
   strcpy((char *) error_message, " ");
   *resultIsNull = IsNotNull;
   inputStrLength = strlen((const char *) inputString);
   if (*start < 1)
   {
      strcpy((char *) result, (const char *) inputString) ;
      return;
   }
   if (*start > inputStrLength)
   {
      strcpy((char *) result, "");
      return;
   }
   strcpy((char *) result,
          (const char *) inputString + (*start - 1));
}