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

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

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

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

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

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

INNUM  PIC S9(9) COMP
OUTCHAR PIC X(5000)
IND  PIC S9(4) COMP
.
.
.
MOVE -1                      TO IND
EXEC SQL CALL STPROC2(:INNUM, :OUTCHAR :IND)  END-EXEC