リリース情報


34.4 第 5 章 SQL プロシージャーの構築

34.4.1 SQL プロシージャー環境の設定

次の指示は、「セットアップ」で DB2 環境をセットアップ するために、指示に追加されています。

SQL プロシージャーのサポートのために、 アプリケーション開発クライアントをサーバーにインストールする必要があります。 アプリケーション開発クライアントをインストールする情報については、 ご使用のプラットフォームの 概説およびインストール ブックを参照してください。ご使用のプラットフォームでの DB2 サポートの C および C++ コンパイラー を調べるには、「プラットフォームでサポートされるソフトウェア」をご覧ください。

注:
OS/2 の FAT ファイル・システムでは、SQL プロシージャーのスキーマ名 は、8 文字以内に制限されます。 9 文字以上のスキーマ名を使用するには、HPFS ファイル・システムを 使用してください。

コンパイラーは、次の 2 つのパーツ (コンパイラーに対する環境変数の設定と コンパイル・コマンドの定義) での構成されています。 環境変数は、コンパイラーのバイナリー、ライブラリー、および 組み込みファイルへのパスを提供します。 コンパイル・コマンドは、DB2 が SQL プロシージャーで 生成された C ファイルをコンパイルするために使用するフルコマンドです。

34.4.2 コンパイラー環境変数の設定

下記で説明するように、OS/2、Windows、UNIX ベースのオペレーティング・システム で環境を構成する場合、それぞれ規則が異なります。 構成が必要のない場合もあります。また、 DB2_SQLROUTINE_COMPILER_PATH DB2 レジストリー変数を 環境変数を適切に設定する実行可能スクリプトを示す ために設定する必要がある場合もあります。

注:
db2set コマンドを 使用するか、ストアード・プロシージャー・ビルダーから 「SQL ストアード・プロシージャー作成オプション」ダイアログを使用して、 この DB2 レジストリー変数の値を設定してください。 「SQL ストアード・プロシージャー作成オプション」ダイアログを使用すると、 変更を有効にするために物理的にデータベース・サーバーにアクセスしたり、 データベース・サーバーを再始動する必要がなくなります。

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"

注:
このコマンドでは、C++ コンパイラーが c: ドライブにインストールされていると想定されています。 必要であれば、ドライブまたはパスを変更して、ご使用のシステム の C++ コンパイラーの位置を反映させてください。

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"

注:
このコマンドでは、C++ コンパイラーが c: ドライブにインストールされていると想定されています。 必要であれば、ドライブまたはパスを変更して、ご使用のシステム の C++ コンパイラーの位置を反映させてください。

UNIX ベースのオペレーティング・システムでは、DB2 は、ストアード・プロシージャーを最初にコンパイルする時に、実行可能 スクリプト・ファイル $HOME/sqllib/function/routine/sr_cpath ( コンパイラー環境変数のデフォルト値が含まれます) を生成します。 デフォルト値がコンパイラーに適合しない場合は、 このファイルを編集してください。 あるいは、DB2_SQLROUTINE_COMPILER_PATH DB2 レジストリー変数を設定して、設定を指定する 別の実行可能スクリプトの全パス名が含まれるようにすることもできます。(上記の例をご覧ください。)

34.4.3 コンパイル・コマンドのカスタマイズ

アプリケーション開発クライアントのインストールは、 各プラットフォームでサポートされるコンパイラーのうちの最低 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 キーワードを使用します。

注:
db2set コマンドを 使用するか、ストアード・プロシージャー・ビルダーから 「SQL ストアード・プロシージャー作成オプション」ダイアログを使用して、 この DB2 レジストリー変数の値を設定してください。 「SQL ストアード・プロシージャー作成オプション」ダイアログを使用すると、 変更を有効にするために物理的にデータベース・サーバーにアクセスしたり、 データベース・サーバーを再始動する必要がなくなります。

以下は、サーバー・プラットフォームでサポートされている 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 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。

注:
64-bit SQL プロシージャー (AIX 版) をコンパイルするには、上のコマンドに -q64 オプションを 追加してください。
IBM VisualAge C++ (AIX 版) バージョン 4 を使用するには:
      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 レジストリー変数が設定されていない場合、これがデフォルトのコンパイル・コマンドになります。

注:

  1. コンパイラー・オプション、-xarch=v8plusa は、デフォルトのコンパイラー・コマンドに追加されています。このオプションが追加されることに関しての詳細は 34.8, "第 12 章 Solaris アプリケーションの構築" をご覧ください。

  2. Solaris で 64-bit SQL プロシージャーをコンパイルするには、-xarch=v8plusa オプションを 使用し、-xarch=v9 オプションを上のコマンドに追加する。

Windows NT および Windows 2000

注:
SQL プロシージャーは Windows 98 または Windows 95 ではサポートされていません。

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=

34.4.4 中間ファイルを保存

SQL プロシージャーが正常に作成されなかった場合にできる中間ファイルは 手動で削除する必要があります。これらのファイルは次のディレクトリーに保存されます:

UNIX
$DB2PATH/function/routine/sqlproc/$DATABASE/$SCHEMA/tmp

$DB2PATH は、インスタンスが生成されたディレクトリーを表し、$DATABASE はデータベース名を $SCHEMA は、SQL プロシージャーが生成されたスキーマ名を それぞれ表しています。

OS/2 および Windows
%DB2PATH%\function\routine\sqlproc\%DATABASE%\%SCHEMA%\tmp

%DB2PATH% インスタンスが生成されたディレクトリーを表し、%DATABASE% はデータベース名を、%SCHEMA% SQL プロシージャーが生成されたスキーマ名を それぞれ表しています。

34.4.5 バックアップと復元

SQL プロシージャーが作成されると、生成済み共有ライブラリー/DLL が 2 MB より 小さい場合、これもカタログ表に保管されます。 データベースがバックアップおよび復元されると、2 MB より小さいサイズの生成済み共有ライブラリー/DLL の ある SQL プロシージャーは、カタログ表に保存されたバージョンでバックアップおよび 復元されます。 2 MB より大きい生成済み共有ライブラリー/DLL のある SQL プロシージャーが ある場合、データベースのバックアップと復元を行うとともに、 ファイル・システムのバックアップと復元も行ってください。 これを行わない場合、syscat.procedures カタログ表のソースを使用して、SQL プロシージャーの 生成済み共有ライブラリー/DLL を手動で再作成する必要があります。

注:
データベースの回復時間には、回復中のデータベースに属するファイル・システムに あるすべての SQL プロシージャー実行可能プログラムが除去されます。 索引作成構成パラメーター (indexrec) が RESTART に設定されていると、 すべての SQL プロシージャー実行可能プログラムは、カタログ表から抽出され、 次の接続時にファイル・システムに書き戻されます。 設定されていないと、SQL 実行可能プログラムは、SQL プロシージャーの最初の実行で抽出されます。
実行可能ファイルは、以下のディレクトリーに置かれます:

UNIX
$DB2PATH/function/routine/sqlproc/$DATABASE

$DB2PATH は、インスタンスが生成されたディレクトリーを表し、$DATABASE はデータベース名を $SCHEMA は、SQL プロシージャーが生成されたスキーマ名をそれぞれ表しています。

OS/2 および Windows
%DB2PATH%\function\routine\sqlproc\%DATABASE%

%DB2PATH% インスタンスが生成されたディレクトリーを表し、%DATABASE% は SQL プロシージャーが生成されたデータベース名をそれぞれ表しています。

34.4.6 SQL プロシージャーの作成

SQL の開発の際は、データベース・マネージャー構成パラメーターの KEEPDARI を 「NO」 に設定します。 SQL プロシージャーが一度実行され、ロードされたままの状態だと、同じ名前でストアード・プロシージャーをドロップしたり、作成したりしようとすると、ライブラリーが更新できない、ファイル・システムから実行可能ファイルがドロップされるなどの問題が発生する場合があります。また実行可能ファイルが削除できないため、データベースのドロップや変更をロールバックしようとした時に、問題が発生する場合もあります。

KEEPDARI パラメーターの設定に関して 詳しくは、「アプリケーション構築ガイド」 の 「第 2 章 セットアップ」 の 「データベース・マネージャー構成ファイルの更新」 をご覧ください。

注:
SQL プロシージャーは、パラメーターとして、以下のデータ・タイプをサポートしていません:

34.4.7 ストアード・プロシージャーの呼び出し

'CALL コマンドの使用' の始めの段落で読み取ることができます:

CALL コマンドを使用するには、各出力パラメーターのプレースホルダーで ある '?' と同様に、ストアード・プロシージャー名に入力、もしくは入出力パラメーターを 加えたものを入力する必要があります。 CALL コマンドの構文について詳細は、10.14, "CALL" をご覧ください。

34.4.8 コンパイルされた SQL プロシージャーの配布

注:
コンパイルされた SQL プロシージャーを DB2 サーバー間で配布するには、 コンパイルされた SQL プロシージャーの配布元または配布先となる 各 DB2 サーバーで以下の手順を行う必要があります。

ステップ  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 プロシージャーの定義を含め、アプリケーションを 開発する。

ステップ  2.

プロシージャーをテストした後、各プロシージャーの コンパイル済みバージョンを異なるファイルに抽出する。 詳しくは、「コマンド解説書」の GET ROUTINE コマンド、または 「SQL 解説書」の GET_ROUTINE_SAR ストアード・プロシージャーを 参照してください。

ステップ  3.

2 で作成されたファイルを使用して、 PUT ROUTINE コマンドを実行するか、 PUT_ROUTINE_SAR ストアード・プロシージャーを呼び出して、 各サーバーにそれぞれのプロシージャーのコンパイル済みバージョンをインストールする。 各データベース・サーバーのオペレーティング・システムと DB2 のレベルは 同じでなければなりません。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]