コンパイル済み SQL オブジェクトのプリコンパイル・オプションと BIND オプションのカスタマイズ
SQL プロシージャー、コンパイル済み関数、コンパイル済みトリガー、およびコンパウンド SQL (コンパイル済み) ステートメント用のプリコンパイル・オプションおよび BIND オプションは、Db2® レジストリー変数または一部の SQL プロシージャー・ルーチンを使用してカスタマイズできます。
このタスクについて
db2set Db2_SQLROUTINE_PREPOPTS=options
これらのオプションは、 SET_ROUTINE_OPTS ストアード・プロシージャーを使用して、プロシージャー・レベルで変更できます。 現行セッションで SQL プロシージャーを作成するために設定されているオプションの値は、 GET_ROUTINE_OPTS 関数を使用して取得できます。
特定のルーチンをコンパイルするために使用したオプションは、システム・カタログ表 ROUTINES.PRECOMPILE_OPTIONS の該当ルーチンに対応した行に保管されます。 ルーチンが再度有効になる場合、これらの保管されているオプションも再有効化の際に使用されます。
ルーチンを作成した後で、SYSPROC.ALTER_ROUTINE_PACKAGE プロシージャーおよび SYSPROC.REBIND_ROUTINE_PACKAGE プロシージャーを使用してコンパイル・オプションを変更できます。 変更済みオプションは、ROUTINES_PRECOMPILE_OPTIONS システム・カタログ表に反映されます。
例
この例に使用されている SQL プロシージャーは、次の CLP スクリプトで定義されます。 これらのスクリプトは sqlpl サンプル・ディレクトリーにはありませんが、 CREATE プロシージャー・ステートメントを独自のファイルにカット・アンド・ペーストすることによって、 これらのファイルを簡単に作成できます。
db2 connect to sample
db2 CREATE TABLE expenses(amount DOUBLE, date DATE)
db2 connect reset
db2set Db2_SQLROUTINE_PREPOPTS="DATETIME ISO"
db2stop
db2start
変更を有効にするには、Db2 インスタンスをいったん停止してから再始動する必要があります。 db2 connect to sample
CREATE PROCEDURE maxamount(OUT maxamnt DOUBLE)
BEGIN
SELECT max(amount) INTO maxamnt FROM expenses;
END @
オプション DATETIME ISO および ISOLATION UR を指定して作成されます。 db2 "CALL SET_ROUTINE_OPTS(GET_ROUTINE_OPTS() || ' ISOLATION UR')"
db2 -td@ -vf maxamount.db2
CREATE PROCEDURE fullamount(OUT fullamnt DOUBLE)
BEGIN
SELECT sum(amount) INTO fullamnt FROM expenses;
END @
オプション ISOLATION CS を指定して作成されます (ここでは、インスタンス全体に適用される DATETIME ISO 設定は使用しないことに注意してください)。 CALL SET_ROUTINE_OPTS('ISOLATION CS')
db2 -td@ -vf fullamount.db2
CREATE PROCEDURE perday()
BEGIN
DECLARE cur1 CURSOR WITH RETURN FOR
SELECT date, sum(amount)
FROM expenses
GROUP BY date;
OPEN cur1;
END @
最後の SET_ROUTINE_OPTS 呼び出しでは、引数として NULL 値を使用しています。 これによって、Db2_SQLROUTINE_PREPOPTS レジストリーに指定されているグローバル設定がリストアされるため、
最後のプロシージャーはオプション DATETIME ISO を指定して作成されます。 CALL SET_ROUTINE_OPTS(NULL)
db2 -td@ -vf perday.db2