ここで扱われる内容は、"セットアップ"で扱われた、 DB2 環境のセットアップの説明を補足するものです。
ご使用の環境で SQL プロシージャーをサポートするためには、アプリケーション開発クライアントと、 DB2 がサポートしている C または C++ コンパイラーをサーバーにインストールする必要があります。 アプリケーション開発クライアントのインストールについては、 各プラットフォームの概説およびインストール を参照してください。 各プラットフォームで DB2 がサポートしている C および C++ コンパイラーについては、 "各プラットフォームでサポートされるソフトウェア"を参照してください。
注: | OS/2 FAT ファイル・システムでは、 SQL プロシージャーのスキーマ名が 8 文字以内に制限されています。 スキーマ名が 8 文字以上になる場合は、 HPFS ファイル・システムを使用する必要があります。 |
コンパイラー環境の構成
SQL プロシージャーを作成するためには、次のステップに従って、 サポートされている C または C++ コンパイラーをサーバー上で使用できるように DB2 を構成します。
db2set DB2_SQLROUTINE_COMPILER_PATH=executable_file
ここで、executable_file は、 C コンパイラーの環境ファイルへのフルパス名を表します。
DB2_SQLROUTINE_COMPILER_PATH DB2 レジストリー変数が設定されない場合、 DB2 は代わりにデフォルトのファイルを実行可能ファイルとして設定します。 このデフォルト・ファイルのパスとファイル名は、 各オペレーティング・システムごとに、次のようになっています。
このデフォルト・ファイルを使用する場合は、これに変更を加えて、 ご使用になるサーバー・オペレーティング・システムと、 C および C++ コンパイラーに必要な設定を反映させる必要があります。
注: | Windows NT と Windows 2000 では、コンパイラーの環境変数を SYSTEM 変数として保管しておけば、 DB2_SQLROUTINE_COMPILER_PATH DB2 レジストリー変数を設定する必要はありません。 |
コンパイラー・オプションのカスタマイズ
DB2 では、各プラットフォームごとに、 サポートされているコンパイラーの中から 1 つのコンパイラーをデフォルト値として使用します。 デフォルト値として設定されていない他のコンパイラーを使用する場合は、 DB2_SQLROUTINE_COMPILE_COMMAND DB2 レジストリー変数を使用して、 SQL プロシージャーのコンパイラー・オプションを設定します。 SQL プロシージャーに、カスタマイズした C または C++ コンパイラー・オプションを指定するには、 次のコマンドを使用して、DB2 レジストリーにすべてのオプションを含むコマンド行全体を保管します。
db2set DB2_SQLROUTINE_COMPILE_COMMAND=compiler_command
ここで、compiler_command は C または C++ コンパイル・コマンドを表しており、 ストアード・プロシージャーの作成に必要なオプションやパラメーターが含まれます。
コンパイラー・コマンドにキーワード SQLROUTINE_FILENAME を使用して、 生成された SQC、C、PDB、DEF、EXP、メッセージ・ログ、 および共有ライブラリー・ファイルのファイル名を置き換えることができます。 また、AIX の場合にのみ、 キーワード SQLROUTINE_ENTRY を使用して入り口点を置き換えることができます。
サポートされている C または C++ コンパイラーの DB2_SQLROUTINE_COMPILE_COMMAND に使用されるデフォルト値の例として、 以下に AIX、Solaris、および Windows 32 ビット・オペレーティング・システムのデフォルト・コンパイラー値を示します。 加えて、この例には、デバッグ情報を戻すために提案されている変更も示されています。 他のプラットフォームでデバッグ情報を戻す場合にも、 これと同様の変更を加えることができます。
xlC_r -+ -H512 -T512 -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY \ -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
デバッグ情報を戻すためには、次のようにデフォルトを変更して、 DB2_SQLROUTINE_COMPILE_COMMAND に -g オプションを追加します。
db2set DB2_SQLROUTINE_COMPILE_COMMAND="xlC_r -+ -H512 -T512 -g \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY \ -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2"
ここで、"\" は改行を示すためのもので、実際の値ではありません。
注: | AIX 上で 64 ビットの SQL プロシージャーをコンパイルする場合は、 上のコマンドに -q64 オプションを追加してください。 |
cc -# -Kpic -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -G \ -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -R$HOME/sqllib/lib -ldb2
デバッグ情報を戻すためには、次のようにデフォルトを変更して、 DB2_SQLROUTINE_COMPILE_COMMAND に -g オプションを追加します。
db2set DB2_SQLROUTINE_COMPILE_COMMAND="cc -# -Kpic -g \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -G \ -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \ -R$HOME/sqllib/lib -ldb2"
ここで、"\" は改行を示すためのもので、実際の値ではありません。
注: | Solaris 上で 64 ビットの SQL プロシージャーをコンパイルする場合は、 上のコマンドに -xarch=v9 オプションを追加してください。 |
cl -Od -W2 /TC -D_X86_=1 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /link -dll -def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll %DB2PATH%\lib\db2api.lib
デバッグ情報を戻すためには、次のようにデフォルトを変更します。
db2set DB2_SQLROUTINE_COMPILE_COMMAND="cl -Od -W2 /TC -D_X86_=1 -Z7 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /link -dll -def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll -debug:full -pdb:none -debugtype:cv %DB2PATH%\lib\db2api.lib"
注: | Windows 32 ビット・オペレーティング・システムの場合は、 コンパイラー・コマンドの値を改行せずに 1 つの行に入力しなければなりません。 |
デフォルトのコンパイラー・オプションを戻すには、次のコマンドを使用して、 DB2_SQLROUTINE_COMPILE_COMMAND の DB2 レジストリー値をヌルに設定します。
db2set DB2_SQLROUTINE_COMPILE_COMMAND=
中間ファイルの保存
CREATE PROCEDURE ステートメントが出されると、 DB2 はいくつもの中間ファイルを作成し、通常は、 ステートメントが正常に完了されるとこれらを削除します。 SQL プロシージャーが期待した通りに実行されなかった場合には、 DB2 が作成した SQC、C、PDB、およびメッセージ・ログ・ファイルを調べることができます。 CREATE PROCEDURE ステートメントが正常に実行された場合にも DB2 が作成したファイルを保管したい場合は、 次のコマンドで、DB2_SQLROUTINE_KEEP_FILES DB2 レジストリー変数の値を "1"、 "y"、または "yes" に設定してください。
db2set DB2_SQLROUTINE_KEEP_FILES=1
中間ファイルが保存されるディレクトリーは、 各オペレーティング・システムごとに、次のようになっています。
$HOME/sqllib/function/routine/sqlproc/database_name/schema_name
ここで、database_name と schema_name は、 SQL プロシージャーの作成に使用されたデータベースとスキーマを表しています。
%DB2PATH%\function\routine\sqlproc\database_name\schema_name
ここで、database_name と schema_name は、 SQL プロシージャーの作成に使用されたデータベースとスキーマを表しています。
プリコンパイルおよびバインド・オプションのカスタマイズ
プリコンパイルおよびバインド・オプションは、 DB2_SQLROUTINE_PREPOPTS DB2 レジストリー変数を設定することによってカスタマイズできます。 これらのオプションを、 プロシージャー・レベルでカスタマイズすることはできません。 SQL プロシージャーに、カスタマイズしたプリコンパイル・オプションを指定するには、 次のコマンドを使用して、 DB2 プリコンパイラーで使用するプリコンパイル・オプションのリストを DB2 レジストリーに追加します。
db2set DB2_SQLROUTINE_PREPOPTS=options
ここで、options は、 DB2 プリコンパイラーで使用するプリコンパイル・オプションのリストを示します。 使用できるオプションは、次のものだけです。
BLOCKING {UNAMBIG | ALL | NO} DATETIME {DEF | USA | EUR | ISO | JIS | LOC} DEGREE {1 | degree-of-parallelism | ANY} DYNAMICRULES {BIND | RUN} EXPLAIN {NO | YES | ALL} EXPLAINSNAP {NO | YES | ALL} INSERT {DEF | BUF} ISOLATION {CS |RR |UR |RS |NC} QUERYOPT optimization-level SYNCPOINT {ONEPHASE | TWOPHASE | NONE}