PL/I DB2 LUW ストアド プロシージャは、デバッグできます。ただしデバッグは慎重に行う必要があります。処理への影響とセキュリティ上の問題から、DB2 LUW プロダクション サーバーの使用はお勧めできません。ストアド プロシージャをデバッグするには、VM イメージを使用する方法と、DB2 Express-C などのソフトウェアのシングル ユーザー バージョンを開発用ワークステーションで使用する方法があります。
CREATE PROCEDURE GETPRML (IN PROCNM CHAR(18) ,IN SCHEMA CHAR(8) ,INOUT OUTCODE INTEGER ,INOUT PARMLST CHAR(26) ) LANGUAGE COBOL DETERMINISTIC READS SQL DATA NO DBINFO FENCED NOT THREADSAFE EXTERNAL NAME "GETPRML!GETPRML" PARAMETER STYLE GENERAL PROGRAM TYPE SUB RESULT SETS 0;
PROC(PROCNM, SCHEMA, OUTCODE, PARMLST); /* EXTERNAL('getprml'); */
mfplx -sql db2 -optsql db=sample -deb -coffdebug -defext getprml.pli -c –ppsql
SET LINK=-DEBUG
cbllink /d /V /K getprml.obj db2api.lib mfplimd.lib systemsql.obj setupdeffiles.obj
set CODEWATCH_SRCPATH=C:\Program Files\IBM\SQLLIB\FUNCTION
set CODEWATCH_STBPATH=C:\Program Files\IBM\SQLLIB\FUNCTION
db2fmp.exe は 32 ビット バージョンなので、64 ビット バージョンの DB2 LUW をインストールしている場合は探しやすくなります。
ここで使用できるツールとしては PSLIST があり、www.sysinternals.com の PsTools のダウンロード ページから入手できます。次のコマンドを実行します。
PSLIST DB2FMP
64 ビットの DB2 LUW を使用している場合、実行結果は次のようになります。
Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time db2fmp64 2240 8 9 211 16660 0:00:00.655 0:00:50.512 db2fmp64 2240 8 9 211 16660 0:00:00.655 0:00:50.512 db2fmp64 2056 8 4 143 10888 0:00:00.046 0:00:15.241 db2fmp 2528 8 3 117 12172 0:00:00.140 0:00:15.163
db2fmp に複数の PID が表示される場合はそれらを 1 つずつ実行して、どれがデバッグ対象のストアド プロシージャかを判定します。また CTF トレースを使用しても、どの PID が使用されているかを判定できます。
java –jar <installation path>/cw_java.jar –pid 2528
これでデバッグのタスクを実行し、コード内の変数とステップ実行を検証できます。デバッグから戻った後、ストアド プロシージャ呼び出しの結果を呼び出しプロセスで利用できます。