17.00 - 17.05 - FNC_GetAnyTypeParamInfoの使用例1 - 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
日本語 (日本)

次に示すコードの抜粋部分では、FNC_GetAnyTypeParamInfo関数を呼び出して、TD_ANYTYPE引数についての情報を取得するUDFの例を示します。

#define SQL_TEXT Latin_Text
#include "sqltypes_td.h"
void ScalarFncWAnytype(void *input1,
                       ...,
                       void *result,
                       char sqlstate[6])
{
   anytype_param_info_t paraminfo[2];
   FNC_GetAnyTypeParamInfo(2*sizeof(anytype_param_info_t), &numAnyType, paraminfo);
   if(((paraminfo[1].datatype == CHAR_DT) ||
       (paraminfo[1].datatype == VARCHAR_DT)) &&
       (paraminfo[1].paramIndex == -1) &&
       (paraminfo[1].direction == OUT_PM) &&
       (paraminfo[1].charset == LATIN_CT))
   {
      /* Process the value based upon the data type */
      switch(paraminfo[0].datatype)
      {
         case BYTEINT_DT:
            strcpy ((char *)result,"Byteint");
            break;
            /* Do some processing */
            ...
      }
   }
}

これに相当するSQL関数の定義を次に示します。

REPLACE FUNCTION ScalarFncWAnytype ( p1 TD_ANYTYPE, ...)
   RETURNS TD_ANYTYPE
   NO SQL
   PARAMETER STYLE SQL
   RETURNS NULL ON NULL INPUT
   DETERMINISTIC
   LANGUAGE C
   EXTERNAL NAME 'CS!ScalarFncWAnytype!udfsrc/ScalarFncWAnytype.c';

FNC_GetAnyTypeParamInfo()を呼び出してTD_ANYTYPE引数の情報を取得するその他の例については、TD_ANYTYPEパラメータを使用するCスカラー関数およびTD_ANYTYPEパラメータを使用するC集約関数を参照してください。