DB2 SQL-SQLCODE问题

时间:2018-08-10 17:37:38

标签: sql ibm-midrange db2-400 rpgle

当我在网络上的文本框中进行搜索时,如果没有结果,我想通知用户。我正在尝试使用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)'    

2 个答案:

答案 0 :(得分:2)

在尝试读取结果集之前,您不会找到未找到的记录。您的代码中唯一可以设置SQLCODESQLSTATE的语句是OPENSET 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中完成所有逻辑,这似乎是不必要的包装。可以在herehere中找到更多信息。