次の指示は、「セットアップ」で DB2 環境をセットアップ するために、指示に追加されています。
SQL プロシージャーのサポートのために、 アプリケーション開発クライアントをサーバーにインストールする必要があります。 アプリケーション開発クライアントをインストールする情報については、 ご使用のプラットフォームの 概説およびインストール ブックを参照してください。ご使用のプラットフォームでの DB2 サポートの C および C++ コンパイラー を調べるには、「プラットフォームでサポートされるソフトウェア」をご覧ください。
コンパイラーは、次の 2 つのパーツ (コンパイラーに対する環境変数の設定と コンパイル・コマンドの定義) での構成されています。 環境変数は、コンパイラーのバイナリー、ライブラリー、および 組み込みファイルへのパスを提供します。 コンパイル・コマンドは、DB2 が SQL プロシージャーで 生成された C ファイルをコンパイルするために使用するフルコマンドです。
下記で説明するように、OS/2、Windows、UNIX ベースのオペレーティング・システム で環境を構成する場合、それぞれ規則が異なります。 構成が必要のない場合もあります。また、 DB2_SQLROUTINE_COMPILER_PATH DB2 レジストリー変数を 環境変数を適切に設定する実行可能スクリプトを示す ために設定する必要がある場合もあります。
OS/2 では以下の設定が必要です。
IBM VisualAge C++ (OS/2 版) バージョン 3.6: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxo\bin\setenv.cmd" IBM VisualAge C++ (OS/2 版) バージョン 4: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcpp40\bin\setenv.cmd"
Windows 32 ビット・オペレーティング・システムでは、コンパイラーの環境変数 が SYSTEM 変数として設定されていると、構成は必要ありません。 そうでない場合には、DB2_SQLROUTINE_COMPILER_PATH DB2 レジストリー変数 を次のように設定してください。
Microsoft Visual C++ バージョン 5.0: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\devstudio\vc\bin\vcvars32.bat" Microsoft Visual C++ バージョン 6.0: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\Micros~1\vc98\bin\vcvars32.bat" IBM VisualAge C++ (Windows 版) バージョン 3.6: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxw\bin\setenv.bat" IBM VisualAge C++ (Windows 版) バージョン 4: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcppw40\bin\setenv.bat"
UNIX ベースのオペレーティング・システムでは、DB2 は、ストアード・プロシージャーを最初にコンパイルする時に、実行可能 スクリプト・ファイル $HOME/sqllib/function/routine/sr_cpath ( コンパイラー環境変数のデフォルト値が含まれます) を生成します。 デフォルト値がコンパイラーに適合しない場合は、 このファイルを編集してください。 あるいは、DB2_SQLROUTINE_COMPILER_PATH DB2 レジストリー変数を設定して、設定を指定する 別の実行可能スクリプトの全パス名が含まれるようにすることもできます。(上記の例をご覧ください。)
アプリケーション開発クライアントのインストールは、 各プラットフォームでサポートされるコンパイラーのうちの最低 1 つで 動作するデフォルトのコンパイル・コマンドを提供します。
AIX: IBM C Set++ for AIX バージョン 3.6.6 Solaris: SPARCompiler C++ バージョン 4.2 および 5.0 HP-UX: HP-UX C++ バージョン A.12.00 Linux: GNU/Linux g++ バージョン egcs-2.90.27 980315 (egcs-1.0.2 リリース) PTX: ptx/C++ バージョン 5.2 OS/2: IBM VisualAge C++ for OS/2 バージョン 3 Windows NT および Windows 2000: Microsoft Visual C++ バージョン 5.0 および 6.0
別のコンパイラーを使用する、またはデフォルトのコマンドをカスタマイズするには、次の例のように、 DB2_SQLROUTINE_COMPILE_COMMAND を DB2 レジストリー変数に設定 する必要があります。
db2set DB2_SQLROUTINE_COMPILE_COMMAND=compilation_command
compilation_command オプション、およびストアード・プロシージャーを作成するのに必要な パラメーターを含む、C あるいは C++ コンパイル・コマンドです。
コンパイル・コマンドで、生成された SQC、C、PDB、DEF、EXP、メッセージ・ログおよび 共有ライブラリー・ファイルのファイル名を置き換えるには、SQLROUTINE_FILENAME キーワードを 使用してください。 AIX の場合のみ、エントリー・ポイント名を置き換えるには、 SQLROUTINE_ENTRY キーワードを使用します。
以下は、サーバー・プラットフォームでサポートされている C または C++ コンパイラーの DB2_SQLROUTINE_COMPILE_COMMAND のデフォルト値です。
AIX
IBM C (AIX 版) バージョン 3.6.6 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlc -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
IBM C Set++ (AIX 版) バージョン 3.6.6 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlC -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 DB2 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
vacbld コマンドの後に構成ファイルを指定しない場合、 SQL プロシージャーを作成する最初の試行の時点で、DB2 は 以下のデフォルト構成ファイルを生成します:
$HOME/sqllib/function/routine/sqlproc.icc
DB2_SQLROUTINE_COMPILE_COMMAND の DB2 レジストリー値を設定する際、 自分で所有する構成ファイルを使用したい場合は、自分で所有する 構成ファイルを指定することができます:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%/function/sqlproc.icc"
HP-UX
HP C Compiler バージョン A.11.00.03 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc +DAportable +ul -Aa +z \ -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \ ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \ -L$HOME/sqllib/lib -ldb2
HP-UX C++ バージョン A.12.00 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC +DAportable +a1 +z -ext \ -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \ ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \ -L$HOME/sqllib/lib -ldb2
DB2_SQLROUTINE_COMPILE_COMMAND DB2 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。
Linux
GNU/Linux gcc バージョン 2.7.2.3 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2
GNU/Linux g++ バージョン egcs-2.90.27 980315 (egcs-1.0.2 release):
db2set DB2_SQLROUTINE_COMPILE_COMMAND=g++ \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2
DB2_SQLROUTINE_COMPILE_COMMAND DB2 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。
PTX
ptx/C バージョン 4.5 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -KPIC \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \ cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME
ptx/C++ バージョン 5.2 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=c++ -KPIC \ -D_RWSTD_COMPILE_INSTANTIATE=0 -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \ cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME
DB2_SQLROUTINE_COMPILE_COMMAND DB2 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。
OS/2
IBM VisualAge C++ (OS/2 版) バージョン 3 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="icc -Ge- -Gm+ -W2 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /B\"/NOFREE /NOI /ST:64000\" SQLROUTINE_FILENAME.def %DB2PATH%\lib\db2api.lib"
DB2_SQLROUTINE_COMPILE_COMMAND DB2 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。
IBM VisualAge C++ (OS/2 版) バージョン 4 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
vacbld コマンドの後に構成ファイルを指定しない場合、 SQL プロシージャーを作成する最初の試行の時点で、DB2 は 以下のデフォルト構成ファイルを生成します:
%DB2PATH%\function\routine\sqlproc.icc
DB2_SQLROUTINE_COMPILE_COMMAND の DB2 レジストリー値を設定する際、 自分で所有する構成ファイルを使用したい場合は、自分で所有する 構成ファイルを指定することができます:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%\function\sqlproc.icc"
Solaris
SPARCompiler C バージョン 4.2 および 5.0 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -xarch=v8plusa -Kpic \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \ -R$HOME/sqllib/lib -ldb2
SPARCompiler C++ バージョン 4.2 および 5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC -xarch=v8plusa -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 DB2 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。
注:
Windows NT および Windows 2000
Microsoft Visual C++ バージョン 5.0 および 6.0 で使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=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
DB2_SQLROUTINE_COMPILE_COMMAND DB2 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。
IBM VisualAge C++ (Windows 版) バージョン 3.6 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="ilib /GI SQLROUTINE_FILENAME.def &icc -Ti -Ge- -Gm+ -W2 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /B\"/ST:64000 /PM:VIO /DLL\" SQLROUTINE_FILENAME.exp %DB2PATH%\lib\db2api.lib"
IBM VisualAge C++ (Windows 版) バージョン 4 を使用するには:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
vacbld コマンドの後に構成ファイルを指定しない場合、 SQL プロシージャーを作成する最初の試行の時点で、DB2 は 以下のデフォルト構成ファイルを生成します:
%DB2PATH%\function\routine\sqlproc.icc
DB2_SQLROUTINE_COMPILE_COMMAND の DB2 レジストリー値を設定する際、 自分で所有する構成ファイルを使用したい場合は、自分で所有する 構成ファイルを指定することができます:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%\function\sqlproc.icc"
デフォルトのコンパイラー・オプションに戻す場合は、以下のコマンドを使用して、 DB2_SQLROUTINE_COMPILE_COMMAND の DB2 レジストリー値をヌルに設定します:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=
SQL プロシージャーが正常に作成されなかった場合にできる中間ファイルは 手動で削除する必要があります。これらのファイルは次のディレクトリーに保存されます:
$DB2PATH は、インスタンスが生成されたディレクトリーを表し、$DATABASE はデータベース名を $SCHEMA は、SQL プロシージャーが生成されたスキーマ名を それぞれ表しています。
%DB2PATH% インスタンスが生成されたディレクトリーを表し、%DATABASE% はデータベース名を、%SCHEMA% SQL プロシージャーが生成されたスキーマ名を それぞれ表しています。
SQL プロシージャーが作成されると、生成済み共有ライブラリー/DLL が 2 MB より 小さい場合、これもカタログ表に保管されます。 データベースがバックアップおよび復元されると、2 MB より小さいサイズの生成済み共有ライブラリー/DLL の ある SQL プロシージャーは、カタログ表に保存されたバージョンでバックアップおよび 復元されます。 2 MB より大きい生成済み共有ライブラリー/DLL のある SQL プロシージャーが ある場合、データベースのバックアップと復元を行うとともに、 ファイル・システムのバックアップと復元も行ってください。 これを行わない場合、syscat.procedures カタログ表のソースを使用して、SQL プロシージャーの 生成済み共有ライブラリー/DLL を手動で再作成する必要があります。
$DB2PATH は、インスタンスが生成されたディレクトリーを表し、$DATABASE はデータベース名を $SCHEMA は、SQL プロシージャーが生成されたスキーマ名をそれぞれ表しています。
%DB2PATH% インスタンスが生成されたディレクトリーを表し、%DATABASE% は SQL プロシージャーが生成されたデータベース名をそれぞれ表しています。
SQL の開発の際は、データベース・マネージャー構成パラメーターの KEEPDARI を 「NO」 に設定します。 SQL プロシージャーが一度実行され、ロードされたままの状態だと、同じ名前でストアード・プロシージャーをドロップしたり、作成したりしようとすると、ライブラリーが更新できない、ファイル・システムから実行可能ファイルがドロップされるなどの問題が発生する場合があります。また実行可能ファイルが削除できないため、データベースのドロップや変更をロールバックしようとした時に、問題が発生する場合もあります。
KEEPDARI パラメーターの設定に関して 詳しくは、「アプリケーション構築ガイド」 の 「第 2 章 セットアップ」 の 「データベース・マネージャー構成ファイルの更新」 をご覧ください。
'CALL コマンドの使用' の始めの段落で読み取ることができます:
CALL コマンドを使用するには、各出力パラメーターのプレースホルダーで ある '?' と同様に、ストアード・プロシージャー名に入力、もしくは入出力パラメーターを 加えたものを入力する必要があります。 CALL コマンドの構文について詳細は、10.14, "CALL" をご覧ください。
ステップ 1. | フィックスパック 3 をインストールする。 |
ステップ 2. | db2updv7 コマンドを実行して、 コンパイルされた SQL プロシージャーを DB2 が抽出およびインストール できるようにする。
db2updv7 -d database_name
|
SQL プロシージャーが定義されると、C プログラムへの変換、 プリコンパイル、ターゲット・データベースに対するバインドが行われ、 コンパイルおよびリンクされて共有ライブラリーが作成されます。 コンパイルおよびリンクのステップでは、C または C++ コンパイラーが データベース・サーバー・マシンで使用可能でなければなりません。 ただし、SQL プロシージャーは一度定義されると、 同じプラットフォームで実行されているが C または C++ コンパイラーに 必ずしもアクセスする必要のない DB2 データベースに、 コンパイルされた形式で配布することができます。 DB2 では、ユーザーは SQL プロシージャーをコンパイル済みの形式でデータベースから抽出し、 コンパイル済みの形式で別のデータベースにインストールすることが可能です。
DB2 は、抽出およびインストール操作に対してコマンド行インターフェースと プログラミング・インターフェースの両方を提供します。 コマンド行インターフェースは、2 つの CLP コマンド GET ROUTINE および PUT ROUTINE で 構成されています。 プログラマティック・インターフェースは、2 つの組み込ストアード・プロシージャー GET_ROUTINE_SAR および PUT_ROUTINE_SAR で構成されています。 コマンド行インターフェースの詳細については、 「コマンド解説書」を参照してください。 プログラミング・インターフェースの詳細については、 「SQL 解説書」を参照してください。
コンパイルされた SQL プロシージャーを 1 つのデータベース・サーバーから 別のデータベース・サーバーに配布するには、 以下の手順を行います。
ステップ 1. | アプリケーションの一部である SQL プロシージャーの定義を含め、アプリケーションを 開発する。 |
プロシージャーをテストした後、各プロシージャーの コンパイル済みバージョンを異なるファイルに抽出する。 詳しくは、「コマンド解説書」の GET ROUTINE コマンド、または 「SQL 解説書」の GET_ROUTINE_SAR ストアード・プロシージャーを 参照してください。 | |
ステップ 3. | 2 で作成されたファイルを使用して、 PUT ROUTINE コマンドを実行するか、 PUT_ROUTINE_SAR ストアード・プロシージャーを呼び出して、 各サーバーにそれぞれのプロシージャーのコンパイル済みバージョンをインストールする。 各データベース・サーバーのオペレーティング・システムと DB2 のレベルは 同じでなければなりません。
|