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语句,这将使我在没有错误发生时遍历所有行,并让我在发生错误时离开.奖励积分可以检查错误.
SQLSTATE更好,并由IBM推荐.
来自IBM的InfoCenter SQL消息和代码参考:SQLCODE和SQLSTATE概念
SQLSTATE是首选的标准返回码.
SQLSTATE是5个字符,前两个字节标识一类条件.
还有别的错误.我一般只检查'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)