我已经将一个 RPGLE 程序转换为 SQLRPGLE,我这样做了很多次。这次我遇到了奇怪的问题。(1) 程序一执行,SQLCODE就设置为077952576,不知道为什么。(2) 当我在调试中运行时,声明游标语句没有被执行,但其他以下 sql 语句被命中。
Exec Sql
DECLARE My_cursor CURSOR for
select * FROM File1 where FLAG <> 'Y'
Order by Field1, Field2, Field3, Field4, Field5;
Run Code Online (Sandbox Code Playgroud)
请指教,谢谢
DECLARE CURSOR
不是可执行语句。这是一个编译时语句。
你不应该在它之后检查 SQLCODE/SQLSTATE...
看看这个程序...
**FREE
ctl-opt main(mymain);
ctl-opt option(*srcstmt);
ctl-opt datfmt(*ISO) timfmt(*ISO);
ctl-opt cvtopt(*NODATETIME);
dcl-proc MyMain;
dcl-s company char(3);
dcl-s part char(25);
dcl-s desc char(30);
dcl-s msg char(50);
dcl-s selComp char(3);
dcl-s myTimestamp timestamp;
exec sql
set option
datfmt=*ISO, timfmt=*ISO;
selComp = 'A06';
exsr OpenCursor;
exsr FetchData;
exec SQL close C1;
selComp = 'A15';
exsr OpenCursor;
exsr FetchData;
exec SQL close C1;
*INLR = *ON;
return;
begsr DeclareCursor;
exec SQL
declare C1 cursor for
select pmco#, pmpart, pmdesc
from pdpmast
where pmco# = :selComp;
endsr;
begsr OpenCursor;
exec SQL open C1;
endsr;
begsr FetchData;
exec sql fetch next from C1 into :company, :part, :desc;
msg = company + ':' + part + ':' + desc;
dsply msg;
endsr;
end-proc;
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个工作(示例)程序。但 DeclareCursor 子例程实际上从未被调用!即使子句中使用了主变量,也不需要如此WHERE
。
执行时使用主变量的值OPEN
。
另请注意,在嵌入式 SQL 中(如上所示)SET OPTION
是编译时语句。事实上,整个源成员中只能有一条SET OPTION
语句,并且它必须是预编译器看到的第一个 SQL 语句。
归档时间: |
|
查看次数: |
1561 次 |
最近记录: |