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;