Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: dml081.cob   Sprache: Cobol

       IDENTIFICATION DIVISION.
       PROGRAM-ID.  DML081.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER.  xyz.
       OBJECT-COMPUTER.  xyz.
       DATA DIVISION.
       WORKING-STORAGE SECTION.


      * EMBEDDED COBOL (file "DML081.PCO")  

      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE 1992/07/06 EMBEDDED COBOL LANGUAGE                          
      * NIST SQL VALIDATION TEST SUITE V6.0                          
      *  DISCLAIMER:                                                  
      *  This program was written by employees of NIST to test SQL    
      *  implementations for conformance to the SQL standards.        
      *  NIST assumes no responsibility for any party's use of        
      *  this program.
      *                                                              
      * DML081.PCO                                                    
      * WRITTEN BY: DAVID W. FLATER                                  
      *                                                              
      *   THIS ROUTINE TESTS THE SQLSTATE STATUS CODE.               
      *                                                              
      * REFERENCES                                                   
      *   ANSI SQL-1992                                              
      *     22.1  SQLSTATE                                           
      *                                                              
      ****************************************************************



           EXEC SQL BEGIN DECLARE SECTION END-EXEC
       01  uid PIC  X(18).
       01  uidx PIC  X(18).
       01  tmpcnt PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  xgrade PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  zeero PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  SQLCODE PIC S9(9) COMP.
       01  SQLSTATE PIC  X(5).
             EXEC SQL END DECLARE SECTION END-EXEC

       01  ii PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  norm1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  norm2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  ALPNUM-TABLE VALUE IS
               "01234ABCDEFGH56789IJKLMNOPQRSTUVWXYZ".
           05  ALPNUM PIC X OCCURS 36 TIMES.

       01  NR-TAB.
           05  NORMSQ PIC X OCCURS 5 TIMES.
       01  errcnt PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
      *date_time declaration 
       01  TO-DAY PIC 9(6).
       01  THE-TIME PIC 9(8).
       01  flag PIC S9(9) DISPLAY SIGN LEADING SEPARATE.

       01  SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE.

       PROCEDURE DIVISION.
       P0.

             MOVE "SCHANZLE" TO uid
             CALL "AUTHID" USING uid
             MOVE "not logged in, not" TO uidx
             EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (uid  NOT  =   uidx) then
               DISPLAY "ERROR: User ", uid " expected. User ", uidx "
      -    " connected"
             STOP RUN
             END-IF
             MOVE 0 TO errcnt
             MOVE 1 TO flag
           DISPLAY
              "SQL Test Suite, V6.0, Embedded COBOL, dml081.pco"
           DISPLAY
           "59-byte ID"
             DISPLAY "TEd Version #"
      *date_time print 
           ACCEPT TO-DAY FROM DATE
           ACCEPT THE-TIME FROM TIME
           DISPLAY "Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME

      ******************** BEGIN TEST0487 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0487 "
             DISPLAY "SQLSTATE = 00000: successful completion"
             DISPLAY "Note: VALID implementation-defined subclass will
      -    " be"
             DISPLAY " accepted instead of no-subclass value of 000
      -    " "
             DISPLAY "SQLSTATE = 01xxx will also be accepted, provided "
             DISPLAY " xxx is a valid implementation-defined subclass
      -    " value "
             DISPLAY "Reference ANSI SQL-1992 section 22.1 SQLSTATE"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -55
             MOVE "x" TO SQLSTATE
             DISPLAY "SELECT COUNT (*) FROM HU.WORKS;"
             EXEC SQL SELECT COUNT (*) INTO :tmpcnt FROM HU.WORKS
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 00000; its value is ", SQLSTATE

             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT = 0 OR NR-TAB NOT = "00000"  OR 
             tmpcnt  NOT =  12) then
               MOVE 0 TO flag
             END-IF


             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0487','pass','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml081.pco *** fail *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0487','fail','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

             DISPLAY "==============================================="

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0487 ********************

      ******************** BEGIN TEST0488 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0488 "
             DISPLAY "SQLSTATE = 21000: cardinality violation"
             DISPLAY "Note: VALID implementation-defined subclass will
      -    " be"
             DISPLAY " accepted instead of no-subclass value of 000
      -    " "
             DISPLAY "Reference ANSI SQL-1992 section 22.1 SQLSTATE"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

      *7.11 <scalar subquery> GR1 
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "SELECT COUNT(*) INTO :tmpcnt FROM HU.WORKS"
             DISPLAY "WHERE PNUM = (SELECT PNUM FROM HU.WORKS WHERE
      -    " HOURS = 80);"
             EXEC SQL SELECT COUNT(*) INTO :tmpcnt FROM HU.WORKS
               WHERE PNUM = (SELECT PNUM FROM HU.WORKS WHERE HOURS = 80)
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 21000; its value is ", SQLSTATE

             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "21000"then
               MOVE 0 TO flag
             END-IF


      *13.5 <select statement: single row> GR2a 
      *more than one row, with WHERE clause 
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY  " "
             DISPLAY "SELECT HOURS INTO :tmpcnt FROM HU.WORKS WHERE
      -    " HOURS = 40;"
             EXEC SQL SELECT HOURS INTO :tmpcnt FROM HU.WORKS WHERE
             HOURS = 40 END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 21000; its value is ", SQLSTATE

             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "21000"then
               MOVE 0 TO flag
             END-IF


      *13.5 <select statement: single row> GR2a 
      *more than one row, full-table select 
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY  " "
             DISPLAY "SELECT HOURS INTO :tmpcnt FROM HU.WORKS;"
             EXEC SQL SELECT HOURS INTO :tmpcnt FROM HU.WORKS END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 21000; its value is ", SQLSTATE

             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "21000"then
               MOVE 0 TO flag
             END-IF


             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0488','pass','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml081.pco *** fail *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0488','fail','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

             DISPLAY "==============================================="

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0488 ********************

      ******************** BEGIN TEST0489 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0489 "
             DISPLAY "SQLSTATE = 02000: no data"
             DISPLAY "Note: VALID implementation-defined subclass will
      -    " be"
             DISPLAY " accepted instead of no-subclass value of 000
      -    " "
             DISPLAY "Reference ANSI SQL-1992 section 22.1 SQLSTATE"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

      *13.3 <fetch statement> GR 5b  - no data 
             EXEC SQL DECLARE FATZERO CURSOR FOR
               SELECT GRADE FROM HU.STAFF WHERE GRADE < :xgrade END-EXEC

             MOVE 12 TO xgrade
             DISPLAY "Open cursor"
             EXEC SQL OPEN FATZERO END-EXEC
             MOVE SQLCODE TO SQL-COD
             COMPUTE SQLCODE = -55
             MOVE "x" TO SQLSTATE

      *one row in cursor - no data on second fetch 
             DISPLAY "first FETCH gets data"
             EXEC SQL FETCH FATZERO INTO :tmpcnt END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 00000; its value is ", SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT = 0 OR NR-TAB NOT = "00000"then
               MOVE 0 TO flag
             END-IF

             DISPLAY "next FETCH is past end of cursor"
             EXEC SQL FETCH FATZERO INTO :tmpcnt END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT =  100  OR  NR-TAB  NOT  =   "02000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL CLOSE FATZERO END-EXEC
             MOVE SQLCODE TO SQL-COD

             DISPLAY  " "
             MOVE 9 TO xgrade
             DISPLAY "Open cursor"
             EXEC SQL OPEN FATZERO END-EXEC
             MOVE SQLCODE TO SQL-COD
             COMPUTE SQLCODE = -55
             MOVE "x" TO SQLSTATE

      *no rows in cursor - no data on first fetch 
             DISPLAY "First FETCH on empty cursor"
             EXEC SQL FETCH FATZERO INTO :tmpcnt END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT =  100  OR  NR-TAB  NOT  =   "02000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL CLOSE FATZERO END-EXEC
             MOVE SQLCODE TO SQL-COD


      *13.5 <select statement: single row> GR 2b - no data 
             DISPLAY  " "
             COMPUTE SQLCODE = -55
             MOVE "x" TO SQLSTATE
             DISPLAY "SELECT GRADE INTO :tmpcnt FROM HU.STAFF WHERE
      -    " EMPNUM = 'xx';"
             EXEC SQL SELECT GRADE INTO :tmpcnt FROM HU.STAFF WHERE
             EMPNUM = 'xx' END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT =  100  OR  NR-TAB  NOT  =   "02000"then
               MOVE 0 TO flag
             END-IF


      *13.7 <delete statement: searched> GR 5 - no data 
             DISPLAY  " "
             COMPUTE SQLCODE = -55
             MOVE "x" TO SQLSTATE
             DISPLAY "DELETE FROM HU.STAFF WHERE GRADE = 11;"
             EXEC SQL DELETE FROM HU.STAFF WHERE GRADE = 11 END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT =  100  OR  NR-TAB  NOT  =   "02000"then
               MOVE 0 TO flag
             END-IF


      *13.8 <insert statement> GR 4a - no data 
             DISPLAY  " "
             COMPUTE SQLCODE = -55
             MOVE "x" TO SQLSTATE
             DISPLAY "INSERT INTO HU.STAFF (EMPNUM,GRADE)"
             DISPLAY " SELECT EMPNUM, 9 FROM HU.WORKS WHERE PNUM =
      -    " 'x9';"
             EXEC SQL INSERT INTO HU.STAFF (EMPNUM,GRADE)
               SELECT EMPNUM, 9 FROM HU.WORKS WHERE PNUM = 'x9' END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT =  100  OR  NR-TAB  NOT  =   "02000"then
               MOVE 0 TO flag
             END-IF


      *13.10 <update statement: searched> GR 4 - no data 
             DISPLAY  " "
             COMPUTE SQLCODE = -55
             MOVE "x" TO SQLSTATE
             DISPLAY "UPDATE HU.STAFF SET CITY = 'Ho' WHERE GRADE = 15;"
             EXEC SQL UPDATE HU.STAFF SET CITY = 'Ho' WHERE GRADE = 15
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT =  100  OR  NR-TAB  NOT  =   "02000"then
               MOVE 0 TO flag
             END-IF

             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0489','pass','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml081.pco *** fail *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0489','fail','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

             DISPLAY "==============================================="

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0489 ********************

      ******************** BEGIN TEST0490 *******************
             MOVE 1 TO flag
             MOVE 0 TO zeero

             DISPLAY " TEST0490 "
             DISPLAY "SQLSTATE = 22012: data exception (division by
      -    " zero)"
             DISPLAY "Reference ANSI SQL-1992 section 22.1 SQLSTATE"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             DISPLAY "INSERT INTO HU.STAFF VALUES"
             DISPLAY " ('E6','Fidel',0,'Havana');"
             EXEC SQL INSERT INTO HU.STAFF
               VALUES ('E6','Fidel',0,'Havana'END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 0; its value is ", SQL-COD
             if (SQLCODE  NOT =  0) then
               MOVE 0 TO flag
             END-IF


      *column reference in WHERE clause - divide by zero 
             DISPLAY  " "
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "SELECT COUNT(*) FROM HU.STAFF"
             DISPLAY "WHERE EMPNAME = 'Fidel' AND 16/GRADE > 2;"
             EXEC SQL SELECT COUNT(*) INTO :tmpcnt
               FROM HU.STAFF WHERE EMPNAME = 'Fidel' AND 16/GRADE > 2
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22012; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22012"then
               MOVE 0 TO flag
             END-IF


      *column reference in SELECT list - divide by zero 
             DISPLAY  " "
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "SELECT 16/GRADE FROM HU.STAFF "
             DISPLAY "WHERE EMPNAME = 'Fidel';"
             EXEC SQL SELECT 16/GRADE INTO :tmpcnt
               FROM HU.STAFF WHERE EMPNAME = 'Fidel' END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22012; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22012"then
               MOVE 0 TO flag
             END-IF


      *set function - divide by zero 
             DISPLAY  " "
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "SELECT COUNT(*) FROM HU.STAFF"
             DISPLAY "GROUP BY CITY HAVING SUM(GRADE/:zeero) > 44;"
           EXEC SQL DECLARE MAINT CURSOR FOR
           SELECT COUNT(*) FROM HU.STAFF
           GROUP BY CITY HAVING SUM(GRADE/:zeero) > 44 END-EXEC
           EXEC SQL OPEN MAINT END-EXEC
           if (SQLCODE = 0) then
             EXEC SQL FETCH MAINT INTO :tmpcnt END-EXEC
           END-IF
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22012; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22012"then
               MOVE 0 TO flag
             END-IF


      *subquery - divide by zero 
             DISPLAY  " "
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "SELECT COUNT(*) FROM HU.STAFF WHERE GRADE = "
             DISPLAY "(SELECT 16/GRADE FROM HU.STAFF WHERE EMPNUM =
      -    " 'E6');"
             EXEC SQL SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF WHERE
             GRADE = 
               (SELECT 16/GRADE FROM HU.STAFF WHERE EMPNUM = 'E6')
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22012; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22012"then
               MOVE 0 TO flag
             END-IF


      *UPDATE with parameter value - divide by zero 
             DISPLAY  " "
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "UPDATE HU.STAFF SET GRADE = GRADE/:zeero WHERE
      -    " GRADE = 12"
             EXEC SQL UPDATE HU.STAFF SET GRADE = GRADE/:zeero WHERE
             GRADE = 12 END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22012; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22012"then
               MOVE 0 TO flag
             END-IF


      *INSERT with parameter value - divide by zero 
             DISPLAY  " "
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "INSERT INTO HU.STAFF SELECT"
             DISPLAY "'X','Y',HOURS/:zeero,'z' FROM HU.WORKS WHERE PNUM
      -    " = 'P6' "
             EXEC SQL INSERT INTO HU.STAFF SELECT
               'X','Y',HOURS/:zeero,'z' FROM HU.WORKS WHERE PNUM = 'P6'
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22012; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22012"then
               MOVE 0 TO flag
             END-IF

             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0490','pass','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml081.pco *** fail *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0490','fail','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

             DISPLAY "==============================================="

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0490 ********************

      ******************** BEGIN TEST0502 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0502 "
             DISPLAY "SQLSTATE = 24000: invalid cursor state"
             DISPLAY "Note: VALID implementation-defined subclass will
      -    " be"
             DISPLAY " accepted instead of no-subclass value of 000
      -    " "
             DISPLAY "Reference ANSI SQL-1992 section 22.1 SQLSTATE"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             DISPLAY "DECLARE COLUMBIA CURSOR FOR SELECT GRADE FROM
      -    " HU.STAFF;"
             EXEC SQL DECLARE COLUMBIA CURSOR FOR
               SELECT GRADE FROM HU.STAFF END-EXEC

      *13.2 <open statement> GR1 
             DISPLAY "OPEN COLUMBIA;"
             EXEC SQL OPEN COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "FETCH COLUMBIA INTO :tmpcnt;"
             EXEC SQL FETCH COLUMBIA INTO :tmpcnt END-EXEC
             MOVE SQLCODE TO SQL-COD
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "OPEN COLUMBIA;"
             EXEC SQL OPEN COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '24000'; its value is ",
             SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "24000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "COMMIT WORK;"


      *13.3 <fetch statement> GR1 
             DISPLAY  " "
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "FETCH COLUMBIA INTO :tmpcnt;"
             EXEC SQL FETCH COLUMBIA INTO :tmpcnt END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '24000'; its value is ",
             SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "24000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "COMMIT WORK;"

      *13.4 <close statement> GR1 
             DISPLAY  " "
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "CLOSE COLUMBIA;"
             EXEC SQL CLOSE COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '24000'; its value is ",
             SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "24000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "COMMIT WORK;"


      *13.6 <delete statement: positioned> GR2 - before first row
             DISPLAY  " "
             DISPLAY "OPEN COLUMBIA;"
             EXEC SQL OPEN COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "DELETE FROM HU.STAFF WHERE CURRENT OF COLUMBIA;"
             EXEC SQL DELETE FROM HU.STAFF WHERE CURRENT OF COLUMBIA
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '24000'; its value is ",
             SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "24000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "ROLLBACK WORK;"


      *13.6 <delete statement: positioned> GR2 - after last row 
             DISPLAY  " "
             DISPLAY "OPEN COLUMBIA;"
             EXEC SQL OPEN COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "FETCH COLUMBIA cursor 13 times. Now positioned
      -    " past end."
             MOVE 0 TO ii
             PERFORM P50 UNTIL ii > 12
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "DELETE FROM HU.STAFF WHERE CURRENT OF COLUMBIA;"
             EXEC SQL DELETE FROM HU.STAFF WHERE CURRENT OF COLUMBIA
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '24000'; its value is ",
             SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "24000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "ROLLBACK WORK;"


      *13.9 <update statement: positioned> GR2 - deleted row 
             DISPLAY  " "
             DISPLAY "OPEN COLUMBIA;"
             EXEC SQL OPEN COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "FETCH COLUMBIA INTO :tmpcnt;"
             EXEC SQL FETCH COLUMBIA INTO :tmpcnt END-EXEC
             MOVE SQLCODE TO SQL-COD
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY  " "
             DISPLAY "DELETE FROM HU.STAFF WHERE CURRENT OF COLUMBIA;"
             EXEC SQL DELETE FROM HU.STAFF WHERE CURRENT OF COLUMBIA
             END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '00000'; its value is ",
             SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT = 0 OR NR-TAB NOT = "00000"then
               MOVE 0 TO flag
             END-IF
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "UPDATE HU.STAFF ... WHERE CURRENT OF COLUMBIA;"
             EXEC SQL UPDATE HU.STAFF SET GRADE = :tmpcnt WHERE CURRENT
             OF COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '24000'; its value is ",
             SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "24000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "ROLLBACK WORK;"


      *13.9 <update statement: positioned> GR2 - after last row 
             DISPLAY  " "
             DISPLAY "OPEN COLUMBIA;"
             EXEC SQL OPEN COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "FETCH COLUMBIA cursor 13 times. Now positioned
      -    " past end."
             MOVE 0 TO ii
             PERFORM P49 UNTIL ii > 12
             MOVE 33 TO SQLCODE
             MOVE "x" TO SQLSTATE
             DISPLAY "UPDATE HU.STAFF ... WHERE CURRENT OF COLUMBIA;"
             EXEC SQL UPDATE HU.STAFF SET GRADE = :tmpcnt WHERE CURRENT
             OF COLUMBIA END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '24000'; its value is ",
             SQLSTATE
             PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (SQLCODE  NOT <  0  OR  NR-TAB  NOT  =   "24000"then
               MOVE 0 TO flag
             END-IF
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD



             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0502','pass','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml081.pco *** fail *** "
               EXEC SQL INSERT INTO HU.TESTREPORT
                 VALUES('0502','fail','PCO'END-EXEC
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

             DISPLAY "==============================================="

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0502 ********************

      **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
           STOP RUN.

      *    ****  Procedures for PERFORM statements

        P50.
               EXEC SQL FETCH COLUMBIA INTO :tmpcnt END-EXEC
               MOVE SQLCODE TO SQL-COD
             ADD 1 TO ii
           .

        P49.
               EXEC SQL FETCH COLUMBIA INTO :tmpcnt END-EXEC
               MOVE SQLCODE TO SQL-COD
             ADD 1 TO ii
           .
       NOSUBCLASS.

      *This routine replaces valid implementation-defined       
      *subclasses with 000.  This replacement equates valid     
      *implementation-defined subclasses with the 000 value     
      *expected by the test case; otherwise the test will fail. 
      *After calling NOSUBCLASS, NORMSQ will be tested          
      *                          SQLSTATE will be printed.      

           MOVE SQLSTATE TO NR-TAB

           MOVE 3 TO norm1
      *subclass begins in position 3 of char array NORMSQ 
           MOVE 14 TO norm2
           PERFORM P90 UNTIL norm2 > 36
           
           if (NR-TAB   =   SQLSTATE) then
             GO TO EXIT-NOSUBCLASS
           END-IF
      *Quit if NORMSQ is unchanged.  Subclass is not impl.-def. 
      *Changed NORMSQ means implementation-defined subclass,    
      *so proceed to zero it out, if valid (0-9,A-Z)            

           MOVE 4 TO norm1
      *examining position 4 of char array NORMSQ 
           MOVE 1 TO norm2
           PERFORM P89 UNTIL norm2 > 36
          
           MOVE 5 TO norm1
      *examining position 5 of char array NORMSQ 
           MOVE 1 TO norm2
           PERFORM P88 UNTIL norm2 > 36
   

      *implementation-defined subclasses are allowed for warnings 
      *(class = 01).  These equate to successful completion 
      *SQLSTATE values of 00000. 
      *Reference SQL-92 4.28 SQL-transactions, paragraph 2 

           if (NORMSQ(1)  =  "0"  AND  NORMSQ(2)  =  "1"then
             MOVE "0" TO NORMSQ(2)
           END-IF
           GO TO EXIT-NOSUBCLASS
           .

       P90.
      *valid subclass begins with 5-9, I-Z, end of ALPNUM table 
           if (NORMSQ(norm1)  =  ALPNUM(norm2)) then
             MOVE "0" TO NORMSQ(norm1)
           END-IF
           ADD 1 TO norm2
           .

       P89.
      *valid characters are 0-9, A-Z 
           if (NORMSQ(norm1)  =  ALPNUM(norm2)) then
             MOVE "0" TO NORMSQ(norm1)
           END-IF
           ADD 1 TO norm2
           .

       P88.
      *valid characters are 0-9, A-Z 
           if (NORMSQ(norm1)  =  ALPNUM(norm2)) then
             MOVE "0" TO NORMSQ(norm1)
           END-IF
           ADD 1 TO norm2
           .

       EXIT-NOSUBCLASS.
           EXIT.


¤ Dauer der Verarbeitung: 0.35 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.


Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.


Bot Zugriff



                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik