我正在尝试编写一个简单的 CL 程序来获取文件名参数并使用 COMMIT(*CHG) 和 DBGVIEW(*SOURCE) 在文件中运行 SQL。我收到 CPD018A:路径名包含嵌入的空值:
原因 。. . . . : 路径名 /SQL/TRIGGERS/PCUSTOMERS_INSERT
?????????????????????????????????????????? ??????????????????????????????.
为 SRCSTMF 指定的 SQL 包含一个或多个嵌入的空值 (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 Navigator 中。我认为我可以通过调用此 CL 程序的外部过程来改进此工作流程,以在调用流文件中的 SQL 之前处理预编译选项,但我无法使用我发送给过程的参数(或当我从命令行调用它)CALL MYLIB.CCSQL('TRIGGERS/PCUSTOMER_INSERT');
在这一点上,我离我最初的目标还很远......任何建议都非常受欢迎。如果它有助于了解,我是一个试图在 iSeries 7.2 系统上实现它的 PHP/SQL 类型的人。
感谢您的阅读。