我正在尝试编写一个简单的CL程序来获取文件名参数,并使用COMMIT(* CHG)和DBGVIEW(* SOURCE)在文件中运行SQL。我得到CPD018A:路径名包含嵌入的空值:
原因。 。 。 。 。 :路径名称/ SQL / TRIGGERS / PCUSTOMERS_INSERT
?????????????????????????????????????????????????? ?????????????????????。SQL
为SRCSTMF指定包含一个或多个嵌入的空值(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之前处理预编译选项来改进此工作流程,但是我无法使用我发送给过程的参数运行CL(或者当我从命令行调用它时{} 1}}
我目前远离我原来的目标......任何建议都非常受欢迎。如果它有助于了解,我是一个尝试在iSeries 7.2系统上创建它的PHP / SQL类型的人。
感谢您的阅读。
答案 0 :(得分:2)
由于命令行解释器和文字值的特殊性,调用无法正常工作。
所以你看,正在分配32个字节,但你的程序正在查看100个字节。因此,臭名昭着的"为什么我的CL程序参数中有垃圾"
三种解决方案
(像这样)
CALL CCSQL PARM('TRIGGERS/PCUSTOMERS_INSERT x')
答案 1 :(得分:2)
以下是为调试而创建的示例过程。
void callExposeAPi (string id)
{
ExposeClient exposeClient = GameObject.Find("ExposeClient").GetComponent<ExposeClient>();
exposeClient.loadExpose(id);
}