ファイル名パラメーターを取り、COMMIT(*CHG) および DBGVIEW(*SOURCE) を使用してファイル内の SQL を実行する単純な CL プログラムを作成しようとしています。CPD018A: パス名にヌルが埋め込まれています:
原因 。. . . . : パス名 /SQL/TRIGGERS/PCUSTOMERS_INSERT
????????????????????????????????????????? ?????????????????????????????????.
SRCSTMF に指定された SQL に、1 つ以上の組み込みヌル (X'00') が含まれています。パス名にヌルは使用できません。
これが私のプログラムです:
PGM PARM(&FILE)
DCL VAR(&FILE) TYPE(*CHAR) LEN(100)
RUNSQLSTM SRCSTMF('/SQL/' || %TRIM(&FILE) || '.SQL') +
DBGVIEW(*SOURCE)
ENDPGM
私は次のようにプログラムを呼び出しています: CALL CCSQL PARM('TRIGGERS/PCUSTOMERS_INSERT')
.
SET OPTION
これは、実際の問題に対するひどい回避策かもしれません: トリガーにステートメントを追加したい:
CREATE OR REPLACE TRIGGER QS36F.PCUSTOMERS_INSERT
INSTEAD OF INSERT ON QS36F.PCUSTOMERS
REFERENCING NEW AS N
FOR EACH ROW
MODE DB2SQL
SET OPTION DBGVIEW =*SOURCE -- this causes a failure when run through JDBC
BEGIN
...
SET OPTION ステートメントを JDBC を通過させる方法を理解できていないので、毎回ステートメントを iSeries ナビゲーターにコピーする必要があります。ストリーム ファイル内の SQL を呼び出す前に、この CL プログラムを呼び出す外部プロシージャでプリコンパイル オプションを処理することで、このワークフローを改善できると考えましたが、プロシージャに送信するパラメータで CL を実行することはできません (またはコマンドラインから呼び出します)CALL MYLIB.CCSQL('TRIGGERS/PCUSTOMER_INSERT');
この時点で、当初の目標からはほど遠い...どんな提案も大歓迎です。知っておくと役立つ場合、私はiSeries 7.2システムでそれを作ろうとしているPHP / SQLのような人です。
読んでくれてありがとう。