当我在网络上的文本框中进行搜索时,如果没有结果,我想通知用户。我正在尝试使用SQLCODE保留字段,但它不起作用。运行调试器时,它始终设置为000。我没有收到错误消息。
我做了一些研究,我相信您需要将保留字段添加到存储过程中。我做到了我不确定自己在做什么错。
存储过程:
{"space_max":113279762432,"space_used":104253784608,"code":200,"timestamp":"2018-08-09 18:47:16","id":63570589,"name":"IDM 6.27 Build 2 Registered (32bit 64bit Patch) [CrackingPatching].zip","parent_id":5279897,"torrents":[],"folders":[],"files":[{"id":332764141,"name":"IDM 6.27 Build 2 Registered (32bit 64bit Patch) [CrackingPatching].zip","size":10873724,"hash":"b74952bfeac28266451b80ac95c674ba8e9b79f3","last_update":"2018-08-09 18:47:16","stream_audio":false,"stream_video":false}],"result":true}
模块:
drop procedure BPCSO/TEST_MB
create procedure BPCSO/TEST_MB
(
InOut DEC(3,0),
InOut DEC(3,0),
In CHAR(30),
In DEC(3,0),
Out CHAR(02)
)
language rpgle
parameter style general
not deterministic
READS SQL DATA
result sets 1
external name 'BPCSO/PUR027WS(PUR027)'
答案 0 :(得分:2)
在尝试读取结果集之前,您不会找到未找到的记录。您的代码中唯一可以设置SQLCODE
或SQLSTATE
的语句是OPEN
和SET RESULT SETS
。这些都不会告诉您没有读取的记录。您实际上必须尝试从结果集中读取该通知。如果SQL无法打开游标,OPEN
将失败,如果没有打开游标,SET RESULT SETS
将失败,但这是您可能会收到的唯一失败。
答案 1 :(得分:1)
我没有看到应根据给出的示例设置SQLCODE
的任何原因。即使未返回任何结果,以下几行也应成功。在查看结果集之前,您不会注意到缺少结果。
EXEC SQL SET RESULT SETS Cursor RSCURSOR;
...
EXEC SQL SET RESULT SETS Cursor RSCURSOR2;
在每个SQL语句调用上都设置了SQLCODE,因此即使先前的SQL语句失败,您在这里也不会注意到。您必须在每个SQL语句之后检查SQLCODE,以注意其中的任何内容是否失败。
作为其他一些改进技巧,您应该使用SQLSTATE而不是SQLCODE。 SQLSTATE是所有SQL数据库中的最新标准,尽管IBM i目前尚无实际删除SQLCODE的计划,但各地都已弃用SQLCODE。
此外,似乎没有任何理由使它成为外部过程,而不是标准的SQL存储过程。考虑到您已经在SQL中完成所有逻辑,这似乎是不必要的包装。可以在here和here中找到更多信息。