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
日本語 (日本)

以下に外部ストアド プロシージャでストアド プロシージャを呼び出すステップの概略を示します。

  1. 同じデータ型のIN、INOUT、またはOUT引数をストアド プロシージャのパラメータとして定義します。

    例:

    VARCHAR_LATIN regionName[64];
    INTEGER       regionCount;
    
     strcpy((char *)regionName, "Southwest");
  2. 呼び出し対象のストアド プロシージャとの間でやり取りする引数へのポインタの配列を定義します。配列内の要素の数は、呼び出し対象のストアド プロシージャが予期するパラメータの数と一致していなければなりません。

    例:

    void *argv[2];
    
    argv[0] = regionName;
  3. ストアド プロシージャとの間でやり取りする引数がNULLかどうかを示すインジケータ値の整数配列を定義します。配列内の要素の数は、呼び出し対象のストアド プロシージャが予期するパラメータの数と一致していなければなりません。

    外部ストアド プロシージャは、INおよびINOUT引数に対応する値を設定します。ストアド プロシージャは、INOUTおよびOUT引数に対応する値を戻します。

    例:

    int ind[2];
    
    ind[0] = 0; /* 0 indicates the IN or INOUT value is not null */
  4. ストアド プロシージャの各引数のデータ型、方向(IN、OUT、またはINOUT)、および属性に合わせてparm_t配列を定義します。配列内の要素の数は、呼び出し対象のストアド プロシージャが予期するパラメータの数と一致していなければなりません。

    parm_t構造体は、sqltypes_td.hで以下のように定義されています。

    typedef struct parm_t
    {
      dtype_et    datatype;
      dmode_et    direction;
      charset_et  charset;
      union {
        int  length;
        int   intervalrange;
        int   precision;
        struct {
          int  totaldigit;
          int  fracdigit;
        } range;
      } size;
    } parm_t;
    parm_t配列内の要素が対応する引数の型 必ず値を持たなければならないparm_tメンバー
    CHARまたはVARCHAR
    datatype
    direction
    charset
    size.length
    BYTEまたはCHARACTER CHARACTER SET GRAPHIC
    datatype
    direction
    size.length
    INTERVAL SECOND(m, n)
    datatype
    direction
    size.range.totaldigit /* m */
    size.range.fracdigit  /* n */
    その他の間隔
    datatype
    direction
    size.intervalrange
    TIME(p)またはTIMESTAMP(p)
    datatype
    direction
    size.precision /* p */
    DECIMAL(m, n)
    datatype
    direction
    size.range.totaldigit /* m */
    size.range.fracdigit  /* n */
    その他
    datatype
    direction

    例:

    parm_t dtype[2];
    
    dtype[0].datatype = VARCHAR_DT;
    dtype[0].direction = IN_PM;
    dtype[0].charset = LATIN_CT;
    dtype[0].size.length = strlen((const char *)regionName);
  5. FNC_CallSPを呼び出します。