以下に外部ストアド プロシージャでストアド プロシージャを呼び出すステップの概略を示します。
- 同じデータ型のIN、INOUT、またはOUT引数をストアド プロシージャのパラメータとして定義します。
例:
VARCHAR_LATIN regionName[64]; INTEGER regionCount; strcpy((char *)regionName, "Southwest");
- 呼び出し対象のストアド プロシージャとの間でやり取りする引数へのポインタの配列を定義します。配列内の要素の数は、呼び出し対象のストアド プロシージャが予期するパラメータの数と一致していなければなりません。
例:
void *argv[2]; argv[0] = regionName;
- ストアド プロシージャとの間でやり取りする引数がNULLかどうかを示すインジケータ値の整数配列を定義します。配列内の要素の数は、呼び出し対象のストアド プロシージャが予期するパラメータの数と一致していなければなりません。
外部ストアド プロシージャは、INおよびINOUT引数に対応する値を設定します。ストアド プロシージャは、INOUTおよびOUT引数に対応する値を戻します。
例:
int ind[2]; ind[0] = 0; /* 0 indicates the IN or INOUT value is not null */
- ストアド プロシージャの各引数のデータ型、方向(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);
- FNC_CallSPを呼び出します。