products/sources/formale sprachen/Cobol/Test-Suite/SQL M image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

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

Datei: isi003.mco   Sprache: Cobol

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


      * Standard COBOL (file "DML152.SCO") calling SQL
      * procedures in file "DML152.MCO".


      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE 1994/7/11 STANDARD 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.
      *                                                              
      * DML152.SCO                                                    
      * WRITTEN BY:  David W. Flater                                 
      * TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE
      *                                                              
      * This routine tests FIPS feature 12 (GET DIAGNOSTICS).        
      *                                                              
      * REFERENCES                                                   
      *   FIPS PUB 127-2 14.1 Transitional SQL                       
      *   ANSI SQL-1992                                              
      *                                                              
      ****************************************************************



      * EXEC SQL BEGIN DECLARE SECTION END-EXEC
       01  SQLCODE PIC S9(9) COMP.
       01  SQLSTATE PIC  X(5).
       01  uid PIC  X(18).
       01  uidx PIC  X(18).
       01  int1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  int2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  num PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  cmd PIC  X(15).
       01  st PIC  X(5).
       01  co PIC  X(11).
       01  sco PIC  X(11).
       01  nl1 PIC  X(1).
       01  nl2 PIC  X(1).
       01  nl3 PIC  X(1).
       01  nl4 PIC  X(1).
       01  nl5 PIC  X(1).
       01  mtxt PIC  X(50).
       01  mlen PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  omlen PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  olds PIC  X(5).
       01  snam PIC  X(6).
       01  tnam PIC  X(5).
       01  cnam PIC  X(4).
      *  EXEC SQL END DECLARE SECTION END-EXEC
       01  odsflg 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  NORMSQ.
           05  NORMSQX 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 "FLATER " TO uid
             CALL "AUTHID" USING uid
             MOVE "not logged in, not" TO uidx
      *  EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO;
             CALL "SUB1" USING SQLCODE SQLSTATE uidx
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB2" USING SQLCODE SQLSTATE
             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

             DISPLAY
           "SQL Test Suite, V6.0, Module COBOL, dml152.sco"
             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 TEST0667 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0667 "
             DISPLAY " Diagnostics: access violations"
             DISPLAY "References:"
             DISPLAY " F# 12 -- Get diagnostics"
             DISPLAY " 18.1 GR.3.g -- "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

      *Future work:  figure out how to test GR.3.j 

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *Subtest 1:  No privileges 

             DISPLAY "SELECT COUNT(*) INTO :int1 FROM HU.STAFF2;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM HU.STAFF2;
             CALL "SUB3" USING SQLCODE SQLSTATE int1
             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
             MOVE SQLSTATE TO olds
             DISPLAY "SQLSTATE should be 42000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             MOVE 0 TO odsflg
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
               MOVE 1 TO odsflg
             END-IF
             DISPLAY  " "

      *18.1 GR.3.g.i 

             COMPUTE int1 = -1
             MOVE "xxxxx" TO st
             MOVE "xxxxxxxxxxx" TO co
             MOVE "xxxxxxxxxxx" TO sco
             MOVE "x" TO nl1
             MOVE "x" TO nl4
             MOVE "x" TO nl5
             MOVE "xxxxxx" TO snam
             MOVE "xxxxx" TO tnam
             MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
             TO mtxt
             COMPUTE mlen = -1
             COMPUTE omlen = -1
             DISPLAY "GET DIAGNOSTICS EXCEPTION 1"
             DISPLAY " :int1 = CONDITION_NUMBER, :st =
      -    " RETURNED_SQLSTATE,"
             DISPLAY " :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,"
             DISPLAY " :nl1 = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,"
             DISPLAY " :tnam = TABLE_NAME, :nl4 = COLUMN_NAME,"
             DISPLAY " :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,"
             DISPLAY " :mlen = MESSAGE_LENGTH, :omlen =
      -    " MESSAGE_OCTET_LENGTH;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION 1
      *    :int1 = CONDITION_NUMBER, :st = RETURNED_SQLSTATE,
      *    :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,
      *    :nl1 = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,
      *    :tnam = TABLE_NAME, :nl4 = COLUMN_NAME,
      *    :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB4" USING SQLCODE SQLSTATE
                  int1 st co sco nl1 snam tnam nl4
             nl5 mtxt mlen omlen
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
             if (SQLCODE  <  0) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "SQLSTATE should be 01004; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "01004"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "snam should be 'HU '; its value is '", snam "'"
             if (snam  NOT  =   "HU "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "tnam should be 'STAFF' (STAFF2 won't fit); its
      -    " value is '", tnam "'"
             if (tnam  NOT  =   "STAFF"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "st should be ", olds "; its value is ", st
             if (st  NOT  =   olds) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "co should be 'ISO 9075 '; its value is ", co
             if (co  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

             if (odsflg  =  1) then
               GO TO P191
             END-IF
             DISPLAY "sco should be 'ISO 9075 '; its value is ", sco
             if (sco  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF
             GO TO P190
           .
        P191.
             DISPLAY "sco should NOT be 'ISO 9075 '; its value is ",
             sco
             if (sco   =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

           .
        P190.
             DISPLAY "nl1 should be ' '; its value is '", nl1 "'"
             if (nl1  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl4 should be ' '; its value is '", nl4 "'"
             if (nl4  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl5 should be ' '; its value is '", nl5 "'"
             if (nl5  NOT  =   " "then
               MOVE 0 TO flag
             END-IF

             DISPLAY "mtxt should be meaningful or blank; its value is
      -    " '", mtxt "'"
             if (mtxt   =  
             "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "mlen should be >= 0; its value is ", mlen
             DISPLAY "omlen should be >= 0; its value is ", omlen
             if (mlen  <  0  OR  omlen  <  0) then
               MOVE 0 TO flag
             END-IF

      *Subtest 2:  Read-only 

             DISPLAY "DELETE FROM HU.PROJ;"
      *  EXEC SQL DELETE FROM HU.PROJ;
             CALL "SUB5" USING SQLCODE SQLSTATE
             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
             MOVE SQLSTATE TO olds
             DISPLAY "SQLSTATE should be 42000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             MOVE 0 TO odsflg
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
               MOVE 1 TO odsflg
             END-IF
             DISPLAY  " "

             COMPUTE int1 = -1
             MOVE "xxxxx" TO st
             MOVE "xxxxxxxxxxx" TO co
             MOVE "xxxxxxxxxxx" TO sco
             MOVE "x" TO nl1
             MOVE "xxxxxx" TO snam
             MOVE "xxxxx" TO tnam
             MOVE "x" TO nl4
             MOVE "x" TO nl5
             MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
             TO mtxt
             COMPUTE mlen = -1
             COMPUTE omlen = -1
             DISPLAY "GET DIAGNOSTICS EXCEPTION 1"
             DISPLAY " :int1 = CONDITION_NUMBER, :st =
      -    " RETURNED_SQLSTATE,"
             DISPLAY " :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,"
             DISPLAY " :nl1 = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,"
             DISPLAY " :tnam = TABLE_NAME, :nl4 = COLUMN_NAME,"
             DISPLAY " :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,"
             DISPLAY " :mlen = MESSAGE_LENGTH, :omlen =
      -    " MESSAGE_OCTET_LENGTH;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION 1
      *    :int1 = CONDITION_NUMBER, :st = RETURNED_SQLSTATE,
      *    :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,
      *    :nl1 = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,
      *    :tnam = TABLE_NAME, :nl4 = COLUMN_NAME,
      *    :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB6" USING SQLCODE SQLSTATE
                  int1 st co sco nl1 snam tnam nl4
             nl5 mtxt mlen omlen
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
             if (SQLCODE  <  0) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "SQLSTATE should be 00000 or 01004; its value is ",
             SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "00000"  AND  NORMSQ  NOT  =  
             "01004"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "00000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "st should be ", olds "; its value is ", st
             if (st  NOT  =   olds) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "co should be 'ISO 9075 '; its value is ", co
             if (co  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

             if (odsflg  =  1) then
               GO TO P189
             END-IF
             DISPLAY "sco should be 'ISO 9075 '; its value is ", sco
             if (sco  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF
             GO TO P188
           .
        P189.
             DISPLAY "sco should NOT be 'ISO 9075 '; its value is ",
             sco
             if (sco   =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

           .
        P188.
             DISPLAY "nl1 should be ' '; its value is '", nl1 "'"
             if (nl1  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "snam should be 'HU '; its value is '", snam "'"
             if (snam  NOT  =   "HU "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "tnam should be 'PROJ '; its value is '", tnam "'"
             if (tnam  NOT  =   "PROJ "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl4 should be ' '; its value is '", nl4 "'"
             if (nl4  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl5 should be ' '; its value is '", nl5 "'"
             if (nl5  NOT  =   " "then
               MOVE 0 TO flag
             END-IF

             DISPLAY "mtxt should be meaningful or blank; its value is
      -    " '", mtxt "'"
             if (mtxt   =  
             "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "mlen should be >= 0; its value is ", mlen
             DISPLAY "omlen should be >= 0; its value is ", omlen
             if (mlen  <  0  OR  omlen  <  0) then
               MOVE 0 TO flag
             END-IF

      *Subtest 3:  Inaccessible column 

             DISPLAY "UPDATE HU.VTABLE SET COL2 = 5;"
      *  EXEC SQL UPDATE HU.VTABLE SET COL2 = 5;
             CALL "SUB7" USING SQLCODE SQLSTATE
             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
             MOVE SQLSTATE TO olds
             DISPLAY "SQLSTATE should be 42000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             MOVE 0 TO odsflg
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
               MOVE 1 TO odsflg
             END-IF
             DISPLAY  " "

             COMPUTE int1 = -1
             MOVE "xxxxx" TO st
             MOVE "xxxxxxxxxxx" TO co
             MOVE "xxxxxxxxxxx" TO sco
             MOVE "x" TO nl1
             MOVE "xxxxxx" TO snam
             MOVE "xxxxx" TO tnam
             MOVE "xxxx" TO cnam
             MOVE "x" TO nl5
             MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
             TO mtxt
             COMPUTE mlen = -1
             COMPUTE omlen = -1
             DISPLAY "GET DIAGNOSTICS EXCEPTION 1"
             DISPLAY " :int1 = CONDITION_NUMBER, :st =
      -    " RETURNED_SQLSTATE,"
             DISPLAY " :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,"
             DISPLAY " :nl1 = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,"
             DISPLAY " :tnam = TABLE_NAME, :cnam = COLUMN_NAME,"
             DISPLAY " :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,"
             DISPLAY " :mlen = MESSAGE_LENGTH, :omlen =
      -    " MESSAGE_OCTET_LENGTH;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION 1
      *    :int1 = CONDITION_NUMBER, :st = RETURNED_SQLSTATE,
      *    :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,
      *    :nl1 = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,
      *    :tnam = TABLE_NAME, :cnam = COLUMN_NAME,
      *    :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB8" USING SQLCODE SQLSTATE
                  int1 st co sco nl1 snam tnam cnam
             nl5 mtxt mlen omlen
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
             if (SQLCODE  <  0) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "(tnam is one character too short)"
             DISPLAY "SQLSTATE should be 01004; its value is ", SQLSTATE
             if (NORMSQ  NOT  =   "01004"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "st should be ", olds "; its value is ", st
             if (st  NOT  =   olds) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "co should be 'ISO 9075 '; its value is ", co
             if (co  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

             if (odsflg  =  1) then
               GO TO P187
             END-IF
             DISPLAY "sco should be 'ISO 9075 '; its value is ", sco
             if (sco  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF
             GO TO P186
           .
        P187.
             DISPLAY "sco should NOT be 'ISO 9075 '; its value is ",
             sco
             if (sco   =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

           .
        P186.
             DISPLAY "nl1 should be ' '; its value is '", nl1 "'"
             if (nl1  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "snam should be 'HU '; its value is '", snam "'"
             if (snam  NOT  =   "HU "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "tnam should be 'VTABL'; its value is '", tnam "'"
             if (tnam  NOT  =   "VTABL"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "cnam should be 'COL2'; its value is '", cnam "'"
             if (cnam  NOT  =   "COL2"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl5 should be ' '; its value is '", nl5 "'"
             if (nl5  NOT  =   " "then
               MOVE 0 TO flag
             END-IF

             DISPLAY "mtxt should be meaningful or blank; its value is
      -    " '", mtxt "'"
             if (mtxt   =  
             "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "mlen should be >= 0; its value is ", mlen
             DISPLAY "omlen should be >= 0; its value is ", omlen
             if (mlen  <  0  OR  omlen  <  0) then
               MOVE 0 TO flag
             END-IF

      *Subtest 4:  Partially accessible column 
      *The following GRANT was added to SCHEMA1 for this subtest: 
      * GRANT UPDATE (COL1) ON VTABLE TO FLATER 
      *Can't do a searched update without SELECT privilege 

             DISPLAY "UPDATE HU.VTABLE SET COL1 = 5"
             DISPLAY " WHERE COL1 = 0;"
      *  EXEC SQL UPDATE HU.VTABLE SET COL1 = 5
      *    WHERE COL1 = 0;
             CALL "SUB9" USING SQLCODE SQLSTATE
             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
             MOVE SQLSTATE TO olds
             DISPLAY "SQLSTATE should be 42000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             MOVE 0 TO odsflg
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
               MOVE 1 TO odsflg
             END-IF
             DISPLAY  " "

             COMPUTE int1 = -1
             MOVE "xxxxx" TO st
             MOVE "xxxxxxxxxxx" TO co
             MOVE "xxxxxxxxxxx" TO sco
             MOVE "x" TO nl1
             MOVE "xxxxxx" TO snam
             MOVE "xxxxx" TO tnam
             MOVE "xxxx" TO cnam
             MOVE "x" TO nl5
             MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
             TO mtxt
             COMPUTE mlen = -1
             COMPUTE omlen = -1
             DISPLAY "GET DIAGNOSTICS EXCEPTION 1"
             DISPLAY " :int1 = CONDITION_NUMBER, :st =
      -    " RETURNED_SQLSTATE,"
             DISPLAY " :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,"
             DISPLAY " :nl1 = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,"
             DISPLAY " :tnam = TABLE_NAME, :cnam = COLUMN_NAME,"
             DISPLAY " :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,"
             DISPLAY " :mlen = MESSAGE_LENGTH, :omlen =
      -    " MESSAGE_OCTET_LENGTH;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION 1
      *    :int1 = CONDITION_NUMBER, :st = RETURNED_SQLSTATE,
      *    :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,
      *    :nl1 = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,
      *    :tnam = TABLE_NAME, :cnam = COLUMN_NAME,
      *    :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB10" USING SQLCODE SQLSTATE
                  int1 st co sco nl1 snam tnam
             cnam nl5 mtxt mlen omlen
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
             if (SQLCODE  <  0) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "(tnam is one character too short)"
             DISPLAY "SQLSTATE should be 01004; its value is ", SQLSTATE
             if (NORMSQ  NOT  =   "01004"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "st should be ", olds "; its value is ", st
             if (st  NOT  =   olds) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "co should be 'ISO 9075 '; its value is ", co
             if (co  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

             if (odsflg  =  1) then
               GO TO P185
             END-IF
             DISPLAY "sco should be 'ISO 9075 '; its value is ", sco
             if (sco  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF
             GO TO P184
           .
        P185.
             DISPLAY "sco should NOT be 'ISO 9075 '; its value is ",
             sco
             if (sco   =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

           .
        P184.
             DISPLAY "nl1 should be ' '; its value is '", nl1 "'"
             if (nl1  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "snam should be 'HU '; its value is '", snam "'"
             if (snam  NOT  =   "HU "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "tnam should be 'VTABL'; its value is '", tnam "'"
             if (tnam  NOT  =   "VTABL"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "cnam should be 'COL1'; its value is '", cnam "'"
             if (cnam  NOT  =   "COL1"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl5 should be ' '; its value is '", nl5 "'"
             if (nl5  NOT  =   " "then
               MOVE 0 TO flag
             END-IF

             DISPLAY "mtxt should be meaningful or blank; its value is
      -    " '", mtxt "'"
             if (mtxt   =  
             "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "mlen should be >= 0; its value is ", mlen
             DISPLAY "omlen should be >= 0; its value is ", omlen
             if (mlen  <  0  OR  omlen  <  0) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "ROLLBACK WORK;"
      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB11" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0667','pass','MCO');
               CALL "SUB12" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml152.sco *** fail *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0667','fail','MCO');
               CALL "SUB13" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB14" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0667 ********************
      ******************** BEGIN TEST0668 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0668 "
             DISPLAY " Diagnostics: COMMAND_FUNCTION (static)"
             DISPLAY "References:"
             DISPLAY " F# 12 -- Get diagnostics"
             DISPLAY " 18.1 -- "
             DISPLAY " TC #2 18.1 -- unrecognized statements"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *COMMIT WORK 
      *Even if we get an invalid transaction state it should still 
      *set COMMAND_FUNCTION 

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB15" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

      *This verifies that GET DIAGNOSTICS sets SQLSTATE 
             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB16" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'COMMIT WORK '; its value is ",
             cmd
             if (cmd  NOT  =   "COMMIT WORK "then
               MOVE 0 TO flag
             END-IF

      *SELECT 

             DISPLAY "SELECT COUNT(*) INTO :int1 FROM USIG;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM USIG;
             CALL "SUB17" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB18" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'SELECT '; its value is ",
             cmd
             if (cmd  NOT  =   "SELECT "then
               MOVE 0 TO flag
             END-IF

      *DELETE WHERE 

             DISPLAY "DELETE FROM CONCATBUF;"
      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB19" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB20" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'DELETE WHERE '; its value is ",
             cmd
             if (cmd  NOT  =   "DELETE WHERE "then
               MOVE 0 TO flag
             END-IF

      *INSERT 

             DISPLAY "INSERT INTO CONCATBUF VALUES ('fnord');"
      *  EXEC SQL INSERT INTO CONCATBUF VALUES ('fnord');
             CALL "SUB21" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB22" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'INSERT '; its value is ",
             cmd
             if (cmd  NOT  =   "INSERT "then
               MOVE 0 TO flag
             END-IF

      *UPDATE WHERE 

             DISPLAY "UPDATE CONCATBUF SET ZZ = 'moby'"
             DISPLAY " WHERE ZZ = 'fnord';"
      *  EXEC SQL UPDATE CONCATBUF SET ZZ = 'moby'
      *    WHERE ZZ = 'fnord';
             CALL "SUB23" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB24" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'UPDATE WHERE '; its value is ",
             cmd
             if (cmd  NOT  =   "UPDATE WHERE "then
               MOVE 0 TO flag
             END-IF

      *OPEN 

             DISPLAY "DECLARE C12741 CURSOR FOR"
             DISPLAY " SELECT ZZ FROM CONCATBUF;"
      *  EXEC SQL DECLARE C12741 CURSOR FOR
      *    SELECT ZZ FROM CONCATBUF END-EXEC

             DISPLAY "OPEN C12741;"
      *  EXEC SQL OPEN C12741;
             CALL "SUB25" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB26" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'OPEN '; its value is ",
             cmd
             if (cmd  NOT  =   "OPEN "then
               MOVE 0 TO flag
             END-IF

      *FETCH 

             DISPLAY "FETCH C12741 INTO :cmd;"
      *  EXEC SQL FETCH C12741 INTO :cmd;
             CALL "SUB27" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB28" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'FETCH '; its value is ",
             cmd
             if (cmd  NOT  =   "FETCH "then
               MOVE 0 TO flag
             END-IF

      *UPDATE CURSOR 

             DISPLAY "UPDATE CONCATBUF"
             DISPLAY " SET ZZ = 'clobber' WHERE CURRENT OF C12741;"
      *  EXEC SQL UPDATE CONCATBUF
      *    SET ZZ = 'clobber' WHERE CURRENT OF C12741;
             CALL "SUB29" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB30" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'UPDATE CURSOR '; its value is ",
             cmd
             if (cmd  NOT  =   "UPDATE CURSOR "then
               MOVE 0 TO flag
             END-IF

      *DELETE CURSOR (<delete statement: positioned>) 

             DISPLAY "DELETE FROM CONCATBUF WHERE CURRENT OF C12741;"
      *  EXEC SQL DELETE FROM CONCATBUF WHERE CURRENT OF C12741
      * ;
             CALL "SUB31" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB32" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'DELETE CURSOR '; its value is ",
             cmd
             if (cmd  NOT  =   "DELETE CURSOR "then
               MOVE 0 TO flag
             END-IF

      *CLOSE CURSOR 

             DISPLAY "CLOSE C12741;"
      *  EXEC SQL CLOSE C12741;
             CALL "SUB33" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB34" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'CLOSE CURSOR '; its value is ",
             cmd
             if (cmd  NOT  =   "CLOSE CURSOR "then
               MOVE 0 TO flag
             END-IF

      *Unrecognized statement:  TC #2 18.1 
      *If your database recognizes FROB, change it to a command   
      *that it doesn't recognize.  If unrecognized statements are 
      *rejected at compile time, TEd this part out. 

             DISPLAY "FROB;"
      *  EXEC SQL FROB;
             CALL "SUB35" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB36" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be ' '; its value is '", cmd "'"
             if (cmd  NOT  =   " "then
               MOVE 0 TO flag
             END-IF

      *ROLLBACK WORK 

             DISPLAY "ROLLBACK WORK;"
      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB37" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB38" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'ROLLBACK WORK '; its value is ",
             cmd
             if (cmd  NOT  =   "ROLLBACK WORK "then
               MOVE 0 TO flag
             END-IF

      *For future reference:  these cannot be tested in Trans SQL 

      *ALLOCATE CURSOR:  Full SQL 
      *ALTER DOMAIN:  Intermediate SQL 
      *CREATE ASSERTION:  Full SQL 
      *CREATE CHARACTER SET:  Intermediate SQL 
      *CREATE COLLATION:  Full SQL 
      *CONNECT:  Full SQL 
      *DEALLOCATE PREPARE:  Full SQL 
      *DISCONNECT:  Full SQL 
      *CREATE DOMAIN:  Intermediate SQL 
      *DROP ASSERTION:  Full SQL 
      *DROP CHARACTER SET:  Intermediate SQL 
      *DROP COLLATION:  Full SQL 
      *DROP DOMAIN:  Intermediate SQL 
      *DROP SCHEMA:  Intermediate SQL 
      *DROP TRANSLATION:  Full SQL 
      *CREATE SCHEMA:  Intermediate SQL 
      *SET CATALOG:  Full SQL 
      *SET CONNECTION:  Full SQL 
      *SET CONSTRAINT:  Full SQL 
      *SET TIME ZONE:  Intermediate SQL 
      *SET NAMES:  Full SQL 
      *SET SCHEMA:  Full SQL 
      *SET SESSION AUTHORIZATION:  Intermediate SQL 
      *CREATE TRANSLATION:  Full SQL 

      *GET DIAGNOSTICS  F# 12  Can't happen 

             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0668','pass','MCO');
               CALL "SUB39" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml152.sco *** fail *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0668','fail','MCO');
               CALL "SUB40" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB41" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0668 ********************
      ******************** BEGIN TEST0669 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0669 "
             DISPLAY "Diagnostics: COMMAND_FUNCTION F# 3, 11"
             DISPLAY "References:"
             DISPLAY " F# 12 -- Get diagnostics"
             DISPLAY " 18.1 -- "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *SET TRANSACTION  F# 11 

             DISPLAY "SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;"
      *  EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
      * ;
             CALL "SUB42" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB43" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'SET TRANSACTION'; its value is ",
             cmd
             if (cmd  NOT  =   "SET TRANSACTION"then
               MOVE 0 TO flag
             END-IF

      *CREATE VIEW  F# 3 

             DISPLAY "CREATE VIEW BEABLE AS"
             DISPLAY " SELECT ZZ FROM CONCATBUF;"
      *  EXEC SQL CREATE VIEW BEABLE AS
      *    SELECT ZZ FROM CONCATBUF;
             CALL "SUB44" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB45" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'CREATE VIEW '; its value is ",
             cmd
             if (cmd  NOT  =   "CREATE VIEW "then
               MOVE 0 TO flag
             END-IF

      *CREATE TABLE  F# 3 

             DISPLAY "CREATE TABLE SLACK ("
             DISPLAY " NAAM CHAR (10), DONATION DECIMAL (5, 2));"
      *  EXEC SQL CREATE TABLE SLACK (
      *    NAAM CHAR (10), DONATION DECIMAL (5, 2));
             CALL "SUB46" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB47" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'CREATE TABLE '; its value is ",
             cmd
             if (cmd  NOT  =   "CREATE TABLE "then
               MOVE 0 TO flag
             END-IF

      *ALTER TABLE   F# 3 

             DISPLAY "ALTER TABLE SLACK"
             DISPLAY " ADD COLUMN KIBO_NUMBER INT;"
      *  EXEC SQL ALTER TABLE SLACK
      *    ADD COLUMN KIBO_NUMBER INT;
             CALL "SUB48" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB49" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'ALTER TABLE '; its value is ",
             cmd
             if (cmd  NOT  =   "ALTER TABLE "then
               MOVE 0 TO flag
             END-IF

      *GRANT  F# 3 

             DISPLAY "GRANT ALL PRIVILEGES ON SLACK TO PUBLIC;"
      *  EXEC SQL GRANT ALL PRIVILEGES ON SLACK TO PUBLIC;
             CALL "SUB50" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB51" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'GRANT '; its value is ",
             cmd
             if (cmd  NOT  =   "GRANT "then
               MOVE 0 TO flag
             END-IF

      *REVOKE  F# 3 

             DISPLAY "REVOKE INSERT ON SLACK FROM PUBLIC CASCADE;"
      *  EXEC SQL REVOKE INSERT ON SLACK FROM PUBLIC CASCADE
      * ;
             CALL "SUB52" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB53" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'REVOKE '; its value is ",
             cmd
             if (cmd  NOT  =   "REVOKE "then
               MOVE 0 TO flag
             END-IF

      *DROP TABLE  F# 3 

             DISPLAY "DROP TABLE SLACK RESTRICT;"
      *  EXEC SQL DROP TABLE SLACK RESTRICT;
             CALL "SUB54" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB55" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'DROP TABLE '; its value is ",
             cmd
             if (cmd  NOT  =   "DROP TABLE "then
               MOVE 0 TO flag
             END-IF

      *DROP VIEW  F# 3 

             DISPLAY "DROP VIEW BEABLE RESTRICT;"
      *  EXEC SQL DROP VIEW BEABLE RESTRICT;
             CALL "SUB56" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION;
             CALL "SUB57" USING SQLCODE SQLSTATE cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "cmd should be 'DROP VIEW '; its value is ",
             cmd
             if (cmd  NOT  =   "DROP VIEW "then
               MOVE 0 TO flag
             END-IF

             DISPLAY "ROLLBACK WORK;"
      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB58" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0669','pass','MCO');
               CALL "SUB59" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml152.sco *** fail *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0669','fail','MCO');
               CALL "SUB60" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB61" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0669 ********************
      ******************** BEGIN TEST0672 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0672 "
             DISPLAY " Diagnostics: Multiple conditions"
             DISPLAY "References:"
             DISPLAY " F# 12 -- Get diagnostics"
             DISPLAY " F# 11 -- Transaction isolation"
             DISPLAY " 18.1 -- "
             DISPLAY " TC #2 4.18.1 -- precedence rules for SQLSTATE"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "CREATE TABLE DOUBLE_TROUBLE ("
             DISPLAY " TOO_LITTLE CHAR (10), TOO_LATE CHAR (10));"
      *  EXEC SQL CREATE TABLE DOUBLE_TROUBLE (
      *    TOO_LITTLE CHAR (10), TOO_LATE CHAR (10));
             CALL "SUB62" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB63" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO DOUBLE_TROUBLE VALUES ('Albatross!',
      -    " NULL);"
      *  EXEC SQL INSERT INTO DOUBLE_TROUBLE VALUES ('Albatross!',
      *  NULL);
             CALL "SUB64" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB65" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             MOVE 2 TO int1
             DISPLAY "int1 = 2"
             DISPLAY "SET TRANSACTION DIAGNOSTICS SIZE :int1;"
      *  EXEC SQL SET TRANSACTION DIAGNOSTICS SIZE :int1;
             CALL "SUB66" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *Simultaneously generate a string data, right truncation warning
      *and a null value, no indicator parameter exception.  Since one 
      *is a warning and the other is an error, we know what order they
      *should be in.  See TC #2 4.18.1.                               

             DISPLAY "SELECT * INTO :nl1, :mtxt FROM DOUBLE_TROUBLE;"
      *  EXEC SQL SELECT * INTO :nl1, :mtxt FROM DOUBLE_TROUBLE
      * ;
             CALL "SUB67" USING SQLCODE SQLSTATE nl1 mtxt
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22002; its value is ", SQLSTATE
             if (SQLSTATE  NOT  =   "22002"then
               MOVE 0 TO flag
             END-IF

             COMPUTE num = -1
             DISPLAY "GET DIAGNOSTICS :num = NUMBER;"
      *  EXEC SQL GET DIAGNOSTICS :num = NUMBER;
             CALL "SUB68" USING SQLCODE SQLSTATE num
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "num should be 1 or 2; its value is ", num
             if (num  NOT =  2  AND  num  NOT =  1) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             MOVE "xxxxx" TO st
             MOVE "xxxxxxxxxxx" TO co
             MOVE "xxxxxxxxxxx" TO sco
             MOVE "x" TO nl1
             MOVE "x" TO nl2
             MOVE "x" TO nl3
             MOVE "x" TO nl4
             MOVE "x" TO nl5
             MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
             TO mtxt
             COMPUTE mlen = -1
             COMPUTE omlen = -1
             DISPLAY "GET DIAGNOSTICS EXCEPTION 1"
             DISPLAY " :int1 = CONDITION_NUMBER, :st =
      -    " RETURNED_SQLSTATE,"
             DISPLAY " :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,"
             DISPLAY " :nl1 = CONSTRAINT_SCHEMA, :nl2 = SCHEMA_NAME,"
             DISPLAY " :nl3 = TABLE_NAME, :nl4 = COLUMN_NAME,"
             DISPLAY " :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,"
             DISPLAY " :mlen = MESSAGE_LENGTH, :omlen =
      -    " MESSAGE_OCTET_LENGTH;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION 1
      *    :int1 = CONDITION_NUMBER, :st = RETURNED_SQLSTATE,
      *    :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,
      *    :nl1 = CONSTRAINT_SCHEMA, :nl2 = SCHEMA_NAME,
      *    :nl3 = TABLE_NAME, :nl4 = COLUMN_NAME,
      *    :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB69" USING SQLCODE SQLSTATE
                  int1 st co sco nl1 nl2 nl3 nl4
             nl5 mtxt mlen omlen
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
             if (SQLCODE  <  0) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "SQLSTATE should be 00000 or 01004; its value is ",
             SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "00000"  AND  NORMSQ  NOT  =  
             "01004"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "00000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "st should be 22002; its value is ", st
             if (st  NOT  =   "22002"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "co should be 'ISO 9075 '; its value is ", co
             if (co  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "sco should be 'ISO 9075 '; its value is ", sco
             if (sco  NOT  =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl1 should be ' '; its value is '", nl1 "'"
             if (nl1  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl2 should be ' '; its value is '", nl2 "'"
             if (nl2  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl3 should be ' '; its value is '", nl3 "'"
             if (nl3  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl4 should be ' '; its value is '", nl4 "'"
             if (nl4  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl5 should be ' '; its value is '", nl5 "'"
             if (nl5  NOT  =   " "then
               MOVE 0 TO flag
             END-IF

             DISPLAY "mtxt should be meaningful or blank; its value is
      -    " '", mtxt "'"
             if (mtxt   =  
             "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "mlen should be >= 0; its value is ", mlen
             DISPLAY "omlen should be >= 0; its value is ", omlen
             if (mlen  <  0  OR  omlen  <  0) then
               MOVE 0 TO flag
             END-IF

             if (num  =  1) then
               DISPLAY "Skipping rest of test because NUMBER = 1"
               GO TO P183
             END-IF

             COMPUTE int1 = -1
             MOVE 2 TO int2
             DISPLAY "int2 = 2"
             MOVE "xxxxx" TO st
             MOVE "xxxxxxxxxxx" TO co
             MOVE "xxxxxxxxxxx" TO sco
             MOVE "x" TO nl1
             MOVE "x" TO nl2
             MOVE "x" TO nl3
             MOVE "x" TO nl4
             MOVE "x" TO nl5
             MOVE "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
             TO mtxt
             COMPUTE mlen = -1
             COMPUTE omlen = -1
             DISPLAY "GET DIAGNOSTICS EXCEPTION :int2"
             DISPLAY " :int1 = CONDITION_NUMBER, :st =
      -    " RETURNED_SQLSTATE,"
             DISPLAY " :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,"
             DISPLAY " :nl1 = CONSTRAINT_SCHEMA, :nl2 = SCHEMA_NAME,"
             DISPLAY " :nl3 = TABLE_NAME, :nl4 = COLUMN_NAME,"
             DISPLAY " :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,"
             DISPLAY " :mlen = MESSAGE_LENGTH, :omlen =
      -    " MESSAGE_OCTET_LENGTH;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION :int2
      *    :int1 = CONDITION_NUMBER, :st = RETURNED_SQLSTATE,
      *    :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,
      *    :nl1 = CONSTRAINT_SCHEMA, :nl2 = SCHEMA_NAME,
      *    :nl3 = TABLE_NAME, :nl4 = COLUMN_NAME,
      *    :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB70" USING SQLCODE SQLSTATE
                  int2 int1 st co sco nl1 nl2 nl3
             nl4 nl5 mtxt mlen omlen
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
             if (SQLCODE  <  0) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "SQLSTATE should be 00000 or 01004; its value is ",
             SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "00000"  AND  NORMSQ  NOT  =  
             "01004"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "00000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF
             DISPLAY "int1 should be 2; its value is ", int1
             if (int1  NOT =  2) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "co is ", co
             DISPLAY "sco is ", sco
             if (co  NOT  =   "ISO 9075 "  OR  sco  NOT  =   "ISO 9075
      -    " "then
               DISPLAY "Skipping remainder because of imp-defined
      -    " SQLSTATE"
               GO TO P183
             END-IF
             DISPLAY "st should be 01004; its value is ", st
             if (st  NOT  =   "01004"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl1 should be ' '; its value is '", nl1 "'"
             if (nl1  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl2 should be ' '; its value is '", nl2 "'"
             if (nl2  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl3 should be ' '; its value is '", nl3 "'"
             if (nl3  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl4 should be ' '; its value is '", nl4 "'"
             if (nl4  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "nl5 should be ' '; its value is '", nl5 "'"
             if (nl5  NOT  =   " "then
               MOVE 0 TO flag
             END-IF

             DISPLAY "mtxt should be meaningful or blank; its value is
      -    " '", mtxt "'"
             if (mtxt   =  
             "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "mlen should be >= 0; its value is ", mlen
             DISPLAY "omlen should be >= 0; its value is ", omlen
             if (mlen  <  0  OR  omlen  <  0) then
               MOVE 0 TO flag
             END-IF

           .
        P183.
             DISPLAY "ROLLBACK WORK;"
      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB71" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *Check sytax:  <number of conditions> as a literal 

             DISPLAY "SET TRANSACTION DIAGNOSTICS SIZE 2;"
      *  EXEC SQL SET TRANSACTION DIAGNOSTICS SIZE 2;
             CALL "SUB72" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "ROLLBACK WORK;"
      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB73" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE DOUBLE_TROUBLE CASCADE;"
      *  EXEC SQL DROP TABLE DOUBLE_TROUBLE CASCADE;
             CALL "SUB74" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB75" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0672','pass','MCO');
               CALL "SUB76" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml152.sco *** fail *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0672','fail','MCO');
               CALL "SUB77" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB78" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0672 ********************
      ******************** BEGIN TEST0673 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0673 "
             DISPLAY " Diagnostics SQLSTATE: inv. cond. number"
             DISPLAY "References:"
             DISPLAY " F# 12 -- Get diagnostics"
             DISPLAY " 18.1 GR.2"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "GET DIAGNOSTICS EXCEPTION 0"
             DISPLAY " :int2 = CONDITION_NUMBER;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION 0
      *    :int2 = CONDITION_NUMBER;
             CALL "SUB79" USING SQLCODE SQLSTATE int2
             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
             DISPLAY "SQLSTATE should be 35000; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  NORMSQ  NOT  =   "35000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "35000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF
             DISPLAY  " "

             COMPUTE int1 = -1
             DISPLAY "int1 = -1"
             DISPLAY "GET DIAGNOSTICS EXCEPTION :int1"
             DISPLAY " :int2 = CONDITION_NUMBER;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION :int1
      *    :int2 = CONDITION_NUMBER;
             CALL "SUB80" USING SQLCODE SQLSTATE int1 int2
             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
             DISPLAY "SQLSTATE should be 35000; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  NORMSQ  NOT  =   "35000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "35000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF
             DISPLAY  " "

             DISPLAY "ROLLBACK WORK;"
      *  EXEC SQL ROLLBACK WORK;
             CALL "SUB81" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             if ( flag  =  1 ) then
               DISPLAY " *** pass *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0673','pass','MCO');
               CALL "SUB82" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml152.sco *** fail *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0673','fail','MCO');
               CALL "SUB83" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
               COMPUTE errcnt = errcnt + 1
             END-IF

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB84" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0673 ********************
      **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
           STOP RUN.

      *    ****  Procedures for PERFORM statements

      *Test SQLCODE and SQLSTATE for normal completion. 
       CHCKOK.
             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   NORMSQ NOT = "00000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ = "00000"  AND  NORMSQ NOT = SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF
             .

       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 NORMSQ

           MOVE 3 TO norm1
      *subclass begins in position 3 of char array NORMSQ 
      *valid subclass begins with 5-9, I-Z, end of ALPNUM table 
           PERFORM VARYING norm2 FROM 14 BY 1 UNTIL norm2 > 36
           if (NORMSQX(norm1)  =  ALPNUM(norm2)) then
             MOVE "0" TO NORMSQX(norm1)
           END-IF
           END-PERFORM
           
      *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)            
           if (NORMSQ   =   SQLSTATE) then
             GO TO EXIT-NOSUBCLASS
           END-IF

           MOVE 4 TO norm1
      *examining position 4 of char array NORMSQ 
      *valid characters are 0-9, A-Z 
           PERFORM VARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36
           if (NORMSQX(norm1)  =  ALPNUM(norm2)) then
             MOVE "0" TO NORMSQX(norm1)
           END-IF
           END-PERFORM
          
           MOVE 5 TO norm1
      *valid characters are 0-9, A-Z 
      *examining position 5 of char array NORMSQ 
           PERFORM VARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36
           if (NORMSQX(norm1)  =  ALPNUM(norm2)) then
             MOVE "0" TO NORMSQX(norm1)
           END-IF
           END-PERFORM
   
      *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 (NORMSQX(1)  =  "0"  AND  NORMSQX(2)  =  "1"then
             MOVE "0" TO NORMSQX(2)
           END-IF
           .

       EXIT-NOSUBCLASS.
           EXIT.

¤ Dauer der Verarbeitung: 0.108 Sekunden  (vorverarbeitet)  ¤





Druckansicht
unsichere Verbindung
Druckansicht
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