在ILE RPG中检查sql发现条件的正确方法是什么?

kra*_*nko 6 rpgle embedded-sql db2-400

在RPG中使用嵌入式SQL时,通常会使用游标和dow-loop来处理结果中的所有行.循环中的条件以某种方式依赖于SQLCOD和/或SQLSTTSQLRPGLE程序中的一些全局可用变量?

但检查这些值的正确方法是什么?有人建议SQLCOD = 0别人not (SQLCOD = +100 or SQLSTT = '02000').一个失败的所有警告,另一个没有失败的一些错误,所以我不满足.

为了说明我对一些代码的处理:

Pmain             B
D                 PI
Dmy_ds          E DS                  extname(SOME_TABLE)
D                                     qualified
 /free
  exec sql
    DECLARE cur CURSOR FOR
      SELECT *
      FROM some_table;
  exec sql 
    OPEN cur;
  exec sql
    FETCH cur
     INTO :my_ds;
  dow sql_found();
      exec sql
        FETCH cur
         INTO :my_ds;
  enddo;
  exec sql
    CLOSE cur;
 /end-free
Pmain             E


Psql_found        B
D                 PI              N
 /free
  // insert return statement here...
 /end-free
Psql_found        E
Run Code Online (Sandbox Code Playgroud)

我在这里寻找正确的return语句,这将使我在没有错误发生时遍历所有行,并让我在发生错误时离开.奖励积分可以检查错误.

War*_*enT 5

SQLSTATE更好,并由IBM推荐.

来自IBM的InfoCenter SQL消息和代码参考:SQLCODE和SQLSTATE概念

SQLSTATE是首选的标准返回码.

SQLSTATE是5个字符,前两个字节标识一类条件.

  • '00'=不合格的成功完成
  • '01'=警告
  • '02'=无数据

还有别的错误.我一般只检查'00'.

简单.简单.更便携.

使用SQLCODE通常涉及代码列表,恕我直言,不到开发人员友好.

例:

就个人而言,我通常包括这样的定义和代码:

 D xSQLState@      s               *   inz( %addr(SQLState) )
 D xSQLState       ds             5    based(xSQLState@)
 D  xSQLState2                    2a
 D   
 D Success_On_SQL  C                   const('00')
 D Warning_On_SQL  C                   const('01')
 D NoData_On_SQL   C                   const('02')
Run Code Online (Sandbox Code Playgroud)

然后在任何SQL操作之后,我通常会检查

   if xSQLState2 <> Success_On_Sql;
     someflag = true;
   endif;
Run Code Online (Sandbox Code Playgroud)