DB2 LUW でのストアド・プロシージャのコンパイルとリンク

DB2 LUW を使用した PL/I ストアド・プロシージャのコンパイルとリンクは、大半の PL/I アプリケーションのコンパイルとリンクとは多少異なります。次の手順を使用して、DB2 LUW で DB2 ストアド・プロシージャをコンパイルおよびリンクします。

  1. [mfplx] を使用し、DB2 LUW プログラムと同様に DB2 SQL オプションを使って、ストアド・プロシージャとして使用するプログラムをコンパイルします。ここでは、OBJ ファイルのみを作成します。これを実行するには、mfplx-c コンパイラ・オプションを指定します。
    プログラムにストアド・プロシージャ CALL 文が含まれている場合は、CALL_RESOLUTION DB2 SQL オプションを指定して SQL エラー SQL0204 の発生を回避する必要があります。次に例を示します。
    mfplx -sql db2 -optsql DB=SAMPLE getprml.pli -nolaxdcl –ppsql -c
    注:-noaxdcl コンパイラ・オプションを使用してストアド・プロシージャをコンパイルし、宣言されない変数がないようにします。宣言されない変数は、ストアド・プロシージャでさまざまな問題の原因になります。
  2. プログラムをダイナミック・リンク・ライブラリ (.dll) としてリンクするには、通常の PL/I リンク・コマンドではなく CBLLINK を使用します。

    PL/I DB2 ストアド・プロシージャをリンクするには、追加のモジュールをリンクして DB2 LUW で PL/I ランタイムと PL/I ルーチンを適切にロードできるようにする必要があります。

    ストアド・プロシージャが MAIN の OPTION によって定義されない場合、systemsql.objsetupdeffiles.obj オブジェクト・モジュールを mfplimd.lib ライブラリ・ファイルと 32-ビット db2api.lib ライブラリ・ファイルとともにリンク・コマンドに追加します。次に例を示します。
    cbllink /d /V /K getprml.obj db2api.lib mfplimd.lib systemsql.obj setupdeffiles.obj

    ストアド・プロシージャが MAIN の OPTION によって定義されない場合、これらの追加モジュールをリンク・コマンドでリンクします。

    • lpimainstub.obj
    • lpimain.obj
    • mfexttbl.lib

    次に例を示します。

    cbllink /d /V /K getprml.obj db2api.lib mfplimd.lib mfexttbl.lib systemsql.obj setupdeffiles.obj lpimainstub.obj lpimain.obj
  3. 生成された DLL を sqllib\function ディレクトリにコピーします。
    注:デフォルトで、ストアド・プロシージャを呼び出した後、DB2 LUW は停止するまで呼び出したストアド・プロシージャをアンロードしません。本番環境になければ、.dll コピーの問題を避けるために次のいずれかの手順を使用できます。
    • DB2STOP を実行し、DLL をコピーして、DB2 管理コマンド・プロンプトから DB2START を実行します。
    • 次のコマンドを DB2 コマンド・プロンプトから実行します。
      db2 update dbm cfg using KEEPFENCED NO

    本番環境では、このコマンドを実行するとパフォーマンスに著しく影響するので、使用しないでください。このコマンドの詳細については、IBM のマニュアルを参照してください。