インジケータ変数を使用した処理の高速化

制限事項:このトピックは、Windows 環境 (ローカル開発) にのみ適用されます。

いずれかの出力パラメータで多くの記憶域が必要とされる場合は、記憶領域全体をストアド・プロシージャに渡すのではなく、SQL 文 CALL 内のサイズの大きい出力パラメータそれぞれに対してインジケータ変数を宣言します。インジケータ変数は、呼び出し側プログラムで使用され、ストアド・プロシージャに 2 バイト領域のみを渡し、ストアド・プロシージャから領域全体を受け取ります。

注:GENERAL WITH NULLS リンケージ規則を使用している場合は、すべてのパラメータに対してインジケータ変数を宣言する必要があります。このため、サイズの大きい出力パラメータに対して別のインジケータ変数を宣言する必要はありません。

サイズの大きい出力変数に関連付けられている各インジケータ値に、負数を割り当てます。その後、CALL 文にインジケータ変数をインクルードします。この方法は、ストアド・プロシージャのリンケージ規則が GENERAL または GENERAL WITH NULLS の場合に使用できます。

例えば、GENERAL リンケージ規則によって定義されるストアド・プロシージャ STPROC2 は、整数入力パラメータ 1 つと長さ 5000 バイトの文字出力パラメータ 1 つを使用するとします。ストアド・プロシージャに 5000 バイトの記憶領域を渡すと、無駄に容量を消費してしまいます。その代わりに、これらの文が含まれた PL/I プログラムは、出力変数として 2 バイトのみをストアド・プロシージャに渡し、ストアド・プロシージャから 5000 バイトすべてを受け取ります。

INNUM  FIXED BIN(31);
OUTCHAR CHAR(5000)
IND  FIXED BIN(15);
.
.
.
IND = -1;
EXEC SQL CALL STPROC2(:INNUM, :OUTCHAR :IND);