sqlcode,他错了吗?因为如果他是,我不会感到惊讶。他只是让我们在使用简单的非游标查询时检查sqlstate。是的,他错了。您不需要同时检查SQLCOD和SQLSTATE。您只需要检查其中一个,而SQLSTATE现在是标准的。SQLCOD在技术上是不受
sqlcode,他错了吗?因为如果他是,我不会感到惊讶。他只是让我们在使用简单的非游标查询时检查sqlstate。是的,他错了。您不需要同时检查SQLCOD和SQLSTATE。您只需要检查其中一个,而SQLSTATE现在是标准的。SQLCOD在技术上是不受,sql,ibm-midrange,rpgle,Sql,Ibm Midrange,Rpgle,sqlcode,他错了吗?因为如果他是,我不会感到惊讶。他只是让我们在使用简单的非游标查询时检查sqlstate。是的,他错了。您不需要同时检查SQLCOD和SQLSTATE。您只需要检查其中一个,而SQLSTATE现在是标准的。SQLCOD在技术上是不受欢迎的,但IBM已经声明,他们目前没有删除它的计划。也不需要检查SQLWN0。如果它是这11个指示符中的一个,那么查找特定错误可能会稍微方便一些,但是如果您只是检查SQLWN0是否设置为“W”,那么您可以跳过整个过程,也只检查SQLSTATE。
sqlcode,他错了吗?因为如果他是,我不会感到惊讶。他只是让我们在使用简单的非游标查询时检查sqlstate。是的,他错了。您不需要同时检查SQLCOD和SQLSTATE。您只需要检查其中一个,而SQLSTATE现在是标准的。SQLCOD在技术上是不受欢迎的,但IBM已经声明,他们目前没有删除它的计划。也不需要检查SQLWN0。如果它是这11个指示符中的一个,那么查找特定错误可能会稍微方便一些,但是如果您只是检查SQLWN0是否设置为“W”,那么您可以跳过整个过程,也只检查SQLSTATE。目前,我认为SQLWN中的每个指标都有一个特定的SQLSTATE值。哇,是的,我对我们在这门课上学到的所有东西都过时了并不感到惊讶。谢谢,我的教授在教学时告诉我们,在使用非游标查询时,我们只检查sqlstate,并告诉我们在使用游标检查sqlWN和sqlcode时。他错了吗?真正奇怪的是,如果用交互式sql在程序之外进行查询,它会正确返回并显示我所期望的结果。他是不正确的。在STRSQL和SQLRPGLE之间获得不同的结果并非闻所未闻。它可能源于环境(例如*LIBL)和SQL设置的差异。在STRSQL中,您可以按F13,然后选择“更改会话属性”选项。对于SQLRPGLE,使用DSPPGM命令并在模块上使用“5=显示说明”,然后向下翻页以获取SQL信息。我仍然要说检查SQLSTATE并在这里查找:这是一个很好的答案,谢谢,我将测试它,看看会发生什么!非常感谢
DCL-F BOOKRPT2 PRINTER OFLIND(*IN01);
DCL-S INDGENRE BINDEC(4:0);
DCL-S CATEGORY CHAR(30);
DCL-S TOTALRECORDS PACKED(5:0);
DCL-S TOTALCOST ZONED(5:2);
DCL-S EOF IND;
DCL-S DUMMY ZONED(1);
DCL-DS BOOKRECORD;
BOOK CHAR(50);
DURATION TIME(*ISO);
AUTHOR CHAR(30);
BOOKID ZONED(7:0);
PRICE PACKED(5:2);
GENRE CHAR(20);
END-DS;
//DCL-DS AUDIBLEBKS EXT END-DS;
//**************************************************************************
//* *** M A I N R O U T I N E ***
//**************************************************************************
EXSR PREPFILES;
EXSR GETSYS;
WRITE TITLE;
WRITE COLHDG;
EXSR GETROW;
WRITE GENREREC;
CATEGORY = GENRE;
DOW NOT EOF;
IF *IN01 = *ON;
WRITE TITLE;
WRITE COLHDG;
*IN01 = *OFF;
ENDIF;
IF CATEGORY = GENRE;
WRITE DETAIL;
TOTALRECORDS +=1;
TOTALCOST += PRICE;
ELSE;
WRITE TOTALS;
CATEGORY = GENRE;
WRITE GENREREC;
TOTALRECORDS = 0;
TOTALCOST = 0;
ENDIF;
TOTALBOOKS = TOTALRECORDS;
TOTALPRICE = TOTALCOST;
EXSR GETROW;
ENDDO;
WRITE TOTALS;
EXSR WRAPUP;
*INLR = *ON;
RETURN;
BEGSR PREPFILES;
EXEC SQL
DECLARE BOOKCURSOR CURSOR
FOR
SELECT BOOK, DURATION, AUTHOR, BOOKID, PRICE, GENRE
FROM BCI433LIB/AUDIBLEBKS
ORDER BY GENRE DESC;
//FOR READ ONLY;
EXEC SQL
OPEN BOOKCURSOR;
IF SQLCODE <> 0 OR SQLWN0='W';
EOF = *ON;
ENDIF;
ENDSR;
BEGSR GETROW;
EXEC SQL
FETCH NEXT
FROM BOOKCURSOR
INTO :BOOKRECORD;
IF SQLCODE <> 0 OR SQLWN0 = 'W';
EOF = *ON;
ENDIF;
ENDSR;
BEGSR WRAPUP;
EXEC SQL
CLOSE BOOKCURSOR;
IF SQLCODE <> 0 OR SQLWN0 ='W';
EOF = *ON;
ENDIF;
ENDSR;
BEGSR GETSYS;
EXEC SQL
SELECT CURRENT SERVER, CURRENT DATE
INTO :SYSTEMNAME, :REPORTDATE
from SYSIBM/SYSDummy1;
ENDSR;
If SQLSTATE <> '00000'; // sucess
// handle abnormal condition
Endif;
exec sql
...
if %subst(sqlstate: 1: 2) < '00' or %subst(sqlstate: 1: 2) > '02';
exec sql get diagnostics condition 1
:message = message_test;
SendSqlMsg(message);
endif;