例: 基本的なスカラー関数 - Teradata Database - Teradata Vantage NewSQL Engine

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/uhh1512082756414.ditamap
dita:ditavalPath
ja-JP/uhh1512082756414.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

入力文字列から、指定された開始位置から始まる部分文字列を取り出すスカラー関数の例を、以下に示します。 このスカラー関数では、パラメータ スタイル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));
}