2

ファイル名パラメーターを取り、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のような人です。

読んでくれてありがとう。

4

2 に答える 2

2

デバッグ用に作成されたサンプル プロシージャを次に示します。

CREATE PROCEDURE myschema.ship_it(IN ordnum INTEGER, IN ordtype CHAR(1),
 IN ordweight dec(3,2))
LANGUAGE SQL
SET OPTION DBGVIEW =*SOURCE
sp: BEGIN
DECLARE ratecalc DECIMAL(5,2);

/* Check for international order */
IF ordtype='I' THEN
 SET ratecalc = ordweight * 5.50;
 INSERT INTO wwshipments VALUES(ordnum,ordweight,ratecalc);
ELSE
 SET ratecalc = ordweight * 1.75;
 INSERT INTO shipments values(ordnum,ordweight,ratecalc);
END IF;
END
于 2016-12-22T22:13:05.337 に答える