【发布时间】:2017-05-19 19:30:10
【问题描述】:
被调用的程序入口:
dcl-pi PGM1;
choice uns(3) const;
returnCode likeds(returnCodeTpl);
parameterPtr pointer const options(*nopass);
parameterPtr2 pointer const options(*nopass);
parameterPtr3 pointer const options(*nopass);
end-pi;
调用程序:
document.field1 = 'EL';
document.field2 = 'T';
document.field3 = 2780;
PGM1(1:returnCode:%addr(document));
document 定义(调用):
dcl-ds document_ qualified based(parameterPtr);
field1 char(2);
field2 char(1);
field3 packed(7:0);
end-ds;
document 定义(在调用者上):
dcl-ds document qualified inz;
field1 char(2);
field2 char(1);
field3 packed(7:0);
end-ds;
被调用的程序然后处理document DS,调用一个导出的过程:
select;
...
when (1 = choice);
myProc(document_);
...
endsl;
myProc 定义:
dcl-proc myProc export;
dcl-pi *n ind;
document likeds(document_) const;
end-pi;
dcl-s i int(5) inz;
exec sql <--- Error appears there
select count(field1) into :i from myFile
where
field1 = :document.field1 and
field2 = :document.field2 and
field3 = :document.field3;
...
return i > 0;
end-proc;
myFile 字段在类型document 字段中相等。
不断出现的错误是MCH5003 - 标量错误。无效标量操作数的长度为 128。 在 exec sql 子句上停止调试。
我真的不知道它是什么!
【问题讨论】:
-
我并没有真正关注您的代码...但是您为什么要传递指针而不是变量?更不用说你通过引用传递指针......所以你实际上是在传递一个指向指针的指针。
-
啊@Charles ...问我的老板。这个程序包含多个具有不同参数的程序,所以我不得不想办法处理它们。所以,指针和基于变量。
-
无论如何,我应该澄清什么?
标签: pointers memory-leaks ibm-midrange rpgle