この節では、以下のトピックについて記載します。
組み込み SQL および DB2 API 呼び出しを含むアプリケーションを開発しており、 Micro Focus COBOL コンパイラーを使用している場合には、以下の点に留意してください。
/opt/IBMdb2/V7.1/lib/db2mkrts.args
このディレクトリーを含めるには、 次のように入力します。
export COBCPY=$COBCPY:$HOME/sqllib/include/cobol_mf
注: | COBCPY を .profile ファイル中に設定することもできます。 |
sqllib/samples/cobol_mf にあるスクリプト・ファイル bldapp には、 DB2 アプリケーション・プログラムを作成するためのコマンドが含まれています。
第 1 パラメーター $1 には、ソース・ファイルの名前を指定します。 これは組み込み SQL を含まないプログラムに必要な唯一のパラメーターです。 組み込み SQL プログラムを作成するためにはデータベースへの接続が必要なため、 3 つのパラメーターがオプションとして用意されています。 2 番目のパラメーターは $2 で、 接続するデータベースの名前を指定します。 3 番目のパラメーターは $3 で、 データベースのユーザー ID を指定します。 そしてもう 1 つが $4 で、 データベースのパスワードを指定します。
組み込み SQL プログラムの場合、bldapp は、 プリコンパイルおよびバインドのファイル embprep にパラメーターを渡します。 データベース名を指定しない場合は、 デフォルトの sample データベースを使用します。なお、ユーザー ID とパスワードのパラメーターは、 プログラムを構築するインスタンスとデータベースのあるインスタンスが異なる場合にのみ必要になります。
#! /bin/ksh # bldapp script file -- Solaris # Builds a Micro Focus COBOL application program # Usage: bldapp [ <db_name> [ <userid> <password> ]] # Set DB2PATH to where DB2 will be accessed. # The default is the standard instance path. DB2PATH=$HOME/sqllib # If an embedded SQL program, precompile and bind it. if [[ -f $1".sqb" ]] then embprep $1 $2 $3 $4 fi # Set COBCPY to include the DB2 COPY files directory. export COBCPY=$DB2PATH/include/cobol_mf:$COBCPY # Compile the checkerr.cbl error-checking utility. cob -cx checkerr.cbl # Compile the program. cob -cx $1.cbl # Link the program. cob -x $1.o checkerr.o -L$DB2PATH/lib -ldb2 -ldb2gmf
bldapp のコンパイルおよびリンク・オプション |
---|
コンパイル・オプション
|
リンク・オプション
他のコンパイラー・オプションについては、
コンパイラーの資料をご覧ください。
|
ソース・ファイル client.cbl から組み込み SQL を含まないサンプル・プログラム client を作成するには、 次のように入力します。
bldapp client
結果として、実行可能ファイル client ができます。 sample データベースに対してこの実行可能ファイルを実行するには、 次のように入力します。
client
ソース・ファイル updat.sqb から組み込み SQL アプリケーション updat を構築する方法には、 次の 3 つがあります。
bldapp updat
bldapp updat database
bldapp updat database userid password
結果として、実行可能ファイル updat が作成されます。
この組み込み SQL アプリケーションを実行する方法には次の 3 つがあります。
updat
updat database
updat database userid password
注:
db2stop db2set DB2LIBPATH=$LD_LIBRARY_PATH db2set DB2ENVLIST="COBDIR LD_LIBRARY_PATH" db2set db2startdb2stop がデータベースを停止するようにしてください。 最後の db2set コマンドが設定値を検査するために出されます。 DB2LIBPATH および DB2ENVLIST が正しく設定されるようにしてください。
この動的にリンクされたストアード・プロシージャーをリモート・クライアント・アプリケーションが正常に呼び出すためには、 ストアード・プロシージャーが実行される直前にそのストアード・プロシージャーが常駐するサーバーで呼び出すために Micro Focus COBOL ルーチンの cobinit() が必要です。 makefile またはスクリプト・ファイル bldsrv の実行中に、 これを成し遂げるラッパー・プログラムが作成されます。 次に、 ラッパー・プログラムはストアード・プロシージャー・コードとリンクしてストアード・プロシージャーの共用ライブラリーを形成します。 このラッパー・プログラムを使用するために、 クライアント・アプリケーションが x という名前のストアード・プロシージャーを呼び出すには、 x の代わりに x_wrap を呼び出さなければなりません。
ラッパー・プログラムの詳細については、この節で後述します。
sqllib/samples/cobol_mf にあるスクリプト・ファイル bldsrv には、 ストアード・プロシージャーを作成するためのコマンドが含まれています。 スクリプト・ファイルは、 ストアード・プロシージャーを共用ライブラリーの中にコンパイルしますが、 それはクライアント・アプリケーションから呼び出すことができます。
第 1 パラメーター $1 には、ソース・ファイルの名前を指定します。 第 2 パラメーター $2 には、 接続先のデータベースの名前を指定します。 ストアード・プロシージャーは、 必ずデータベースが常駐するインスタンスに構築される必要があるため、 ユーザー ID やパスワードを指定するパラメーターはありません。
最初のパラメーター (ソース・ファイル名) だけが、必須です。 データベース名は任意で指定します。 データベース名を指定しない場合、 プログラムはデフォルトの sample データベースを使用します。
スクリプト・ファイルは、ソース・ファイル名 $1 を共用ライブラリー名として使います。
#! /bin/ksh # bldsrv script file -- Solaris # Builds a Micro Focus COBOL stored procedure # Usage: bldsrv <prog_name> [ <db_name> ] # Set DB2PATH to where DB2 will be accessed. # The default is the standard instance path. DB2PATH=$HOME/sqllib # Precompile and bind the program. embprep $1 $2 # Set COBCPY to include the DB2 COPY files directory. export COBCPY=$DB2PATH/include/cobol_mf:$COBCPY # Compile the program. cob -cx $1.cbl # Create the wrapper program for the stored procedure. wrapsrv $1 # Link the program creating shared library $1 with main entry point ${1}_wrap cob -x -o $1 ${1}_wrap.c $1.o -Q -G -L$DB2PATH/lib -ldb2 -ldb2gmf # Copy the shared library to the sqllib/function subdirectory. # The user must have write permission to this directory. rm -f $DB2PATH/function/$1 cp $1 $DB2PATH/function
bldsrv のコンパイルおよびリンク・オプション |
---|
コンパイル・オプション
|
リンク・オプション
他のコンパイラー・オプションについては、
コンパイラーの資料をご覧ください。
|
ラッパー・プログラム wrapsrv は、 ストアード・プロシージャーが実行される直前に、 Micro Focus COBOL のルーチン cobinit() が呼び出される原因になります。 その内容は以下のとおりです。
#! /bin/ksh # wrapsrv script file # Creates the wrapper program for Micro Focus COBOL stored procedures # Usage: wrapsrv <stored_proc> # Note: The client program calls "<stored_proc>_wrap" not "<stored_proc>" # Create the wrapper program for the stored procedure. cat << WRAPPER_CODE > ${1}_wrap.c #include <stdio.h> void cobinit(void); int $1(void *p0, void *p1, void *p2, void *p3); int main(void) { return 0; } int ${1}_wrap(void *p0, void *p1, void *p2, void *p3) { cobinit(); return $1(p0, p1, p2, p3); } WRAPPER_CODE |
サンプル・データベースに接続している場合、 ソース・ファイル outsrv.sqb からサンプル・プログラム outsrv を作成するには、 次のように入力します。
bldsrv outsrv
他のデータベースに接続しているときは、 さらにデータベース名も入力します。
bldsrv outsrv database
このスクリプト・ファイルは、 パス sqllib/function 内のサーバーにストアード・プロシージャーをコピーします。
必要であれば、ストアード・プロシージャーにファイル・モードを設定して、 クライアント・アプリケーションからアクセスできるようにします。
ストアード・プロシージャー outsrv を構築してしまえば、 そのストアード・プロシージャーを呼び出すクライアント・アプリケーション outcli を構築できます。 outcli は、 スクリプト・ファイル bldapp を使用して構築することができます。 詳細については、 "DB2 API と組み込み SQL アプリケーション"を参照してください。
ストアード・プロシージャーを呼び出すためには、 次のように入力してサンプル・クライアント・アプリケーションを実行します。
outcli database userid password
ここで、それぞれは次のものを表します。
クライアント・アプリケーションはストアード・プロシージャー・ライブラリー outsrv にアクセスし、 ストアード・プロシージャー関数をサーバー・データベース上で実行します。 この出力は、クライアント・アプリケーションに戻されます。
ストアード・プロシージャーを開発したならば、 次のステートメントを使って、それを終了します。
move SQLZ-HOLD-PROC to return-code.
このステートメントで、 ストアード・プロシージャーはクライアント・アプリケーションに正しく戻ります。 ストアード・プロシージャーが、 ローカル COBOL クライアント・アプリケーションによって呼び出された場合、 これは特に重要です。