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: xts719.cob   Sprache: Cobol

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


      * Standard COBOL (file "DML127.SCO") calling SQL
      * procedures in file "DML127.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.
      *                                                              
      * DML127.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  smint1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
       01  yorn PIC  X(1).
       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  cns PIC  X(2).
       01  snam PIC  X(6).
       01  tnam PIC  X(5).
       01  csrnam PIC  X(6).
      *  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, dml127.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 TEST0665 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0665 "
             DISPLAY " Diagnostics: statement information"
             DISPLAY "References:"
             DISPLAY " F# 12 -- Get diagnostics"
             DISPLAY " 18.1 -- "
             DISPLAY " 18.1 GR.1.b -- MORE"
             DISPLAY " 18.1 GR.1.c -- COMMAND_FUNCTION"
             DISPLAY " 18.1 GR.1.e -- ROW_COUNT"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *COMMAND_FUNCTION and DYNAMIC_FUNCTION are tested elsewhere 

      *It is difficult to check the values of NUMBER and MORE because 
      *there may be an arbitrary number of implementation-defined     
      *warnings given with each statement.                            

             DISPLAY "SELECT COUNT(*) INTO :int1 FROM HU.ECCO;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM HU.ECCO;
             CALL "SUB3" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             MOVE "x" TO yorn
             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :int1 = NUMBER,"
             DISPLAY " :yorn = MORE, :cmd = COMMAND_FUNCTION;"
      *  EXEC SQL GET DIAGNOSTICS :int1 = NUMBER,
      *    :yorn = MORE, :cmd = COMMAND_FUNCTION;
             CALL "SUB4" USING SQLCODE SQLSTATE int1 yorn cmd
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be > 0; its value is ", int1
             DISPLAY "yorn should be Y or N; its value is ", yorn
             DISPLAY "cmd should be 'SELECT '; its value is ",
             cmd
             if (int1  NOT >  0) then
               MOVE 0 TO flag
             END-IF
             if (yorn  NOT  =   "Y"  AND  yorn  NOT  =   "N"then
               MOVE 0 TO flag
             END-IF
             if (cmd  NOT  =   "SELECT "then
               MOVE 0 TO flag
             END-IF

      *Mass firings and layoffs. 

             DISPLAY "DELETE FROM HU.STAFF WHERE GRADE < 13;"
      *  EXEC SQL DELETE FROM HU.STAFF WHERE GRADE < 13;
             CALL "SUB5" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE "x" TO yorn
             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :cmd = COMMAND_FUNCTION,"
             DISPLAY " :int2 = ROW_COUNT,"
             DISPLAY " :yorn = MORE, "
             DISPLAY " :int1 = NUMBER;"
      *  EXEC SQL GET DIAGNOSTICS :cmd = COMMAND_FUNCTION,
      *    :int2 = ROW_COUNT,
      *    :yorn = MORE, 
      *    :int1 = NUMBER;
             CALL "SUB6" USING SQLCODE SQLSTATE cmd int2 yorn int1
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be > 0; its value is ", int1
             DISPLAY "yorn should be Y or N; its value is ", yorn
             DISPLAY "cmd should be 'DELETE WHERE '; its value is ",
             cmd
             DISPLAY "int2 should be 3; its value is ", int2
             if (int1  NOT >  0  OR  int2  NOT =  3) then
               MOVE 0 TO flag
             END-IF
             if (yorn  NOT  =   "Y"  AND  yorn  NOT  =   "N"then
               MOVE 0 TO flag
             END-IF
             if (cmd  NOT  =   "DELETE WHERE "then
               MOVE 0 TO flag
             END-IF

      *Pay cuts, benefits reductions. 

             DISPLAY "UPDATE HU.STAFF SET GRADE = GRADE - 1;"
      *  EXEC SQL UPDATE HU.STAFF SET GRADE = GRADE - 1;
             CALL "SUB7" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE smint1 = -1
             COMPUTE int2 = -1
             MOVE "x" TO yorn
             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :smint1 = NUMBER,"
             DISPLAY " :yorn = MORE, :cmd = COMMAND_FUNCTION,"
             DISPLAY " :int2 = ROW_COUNT;"
      *  EXEC SQL GET DIAGNOSTICS :smint1 = NUMBER,
      *    :yorn = MORE, :cmd = COMMAND_FUNCTION,
      *    :int2 = ROW_COUNT;
             CALL "SUB8" USING SQLCODE SQLSTATE smint1 yorn cmd int2
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "smint1 should be > 0; its value is ", smint1
             DISPLAY "yorn should be Y or N; its value is ", yorn
             DISPLAY "cmd should be 'UPDATE WHERE '; its value is ",
             cmd
             DISPLAY "int2 should be 2; its value is ", int2
             if (smint1  NOT >  0  OR  int2  NOT =  2) then
               MOVE 0 TO flag
             END-IF
             if (yorn  NOT  =   "Y"  AND  yorn  NOT  =   "N"then
               MOVE 0 TO flag
             END-IF
             if (cmd  NOT  =   "UPDATE WHERE "then
               MOVE 0 TO flag
             END-IF

      *Simultaneous hiring of cheap labor. 

             DISPLAY "INSERT INTO HU.STAFF"
             DISPLAY " SELECT PNUM, 'Temp Worker', 4, CITY FROM
      -    " HU.PROJ;"
      *  EXEC SQL INSERT INTO HU.STAFF
      *    SELECT PNUM, 'Temp Worker', 4, CITY FROM HU.PROJ;
             CALL "SUB9" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE "x" TO yorn
             MOVE "xxxxxxxxxxxxxxx" TO cmd
             DISPLAY "GET DIAGNOSTICS :int1 = NUMBER,"
             DISPLAY " :yorn = MORE, :cmd = COMMAND_FUNCTION,"
             DISPLAY " :int2 = ROW_COUNT;"
      *  EXEC SQL GET DIAGNOSTICS :int1 = NUMBER,
      *    :yorn = MORE, :cmd = COMMAND_FUNCTION,
      *    :int2 = ROW_COUNT;
             CALL "SUB10" USING SQLCODE SQLSTATE int1 yorn cmd int2
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be > 0; its value is ", int1
             DISPLAY "yorn should be Y or N; its value is ", yorn
             DISPLAY "cmd should be 'INSERT '; its value is ",
             cmd
             DISPLAY "int2 should be 6; its value is ", int2
             if (int1  NOT >  0  OR  int2  NOT =  6) then
               MOVE 0 TO flag
             END-IF
             if (yorn  NOT  =   "Y"  AND  yorn  NOT  =   "N"then
               MOVE 0 TO flag
             END-IF
             if (cmd  NOT  =   "INSERT "then
               MOVE 0 TO flag
             END-IF

      *Destruction of evidence. 

             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('0665','pass','MCO');
               CALL "SUB12" USING SQLCODE SQLSTATE
               MOVE SQLCODE TO SQL-COD
             else
               DISPLAY " dml127.sco *** fail *** "
      *    EXEC SQL INSERT INTO HU.TESTREPORT
      *      VALUES('0665','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 TEST0665 ********************
      ******************** BEGIN TEST0666 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0666 "
             DISPLAY " Diagnostics: condition information"
             DISPLAY "References:"
             DISPLAY " F# 12 -- Get diagnostics"
             DISPLAY " 18.1 -- "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *Multiple conditions are tested elsewhere 

      *Subtest 1:  boring select. 

             DISPLAY "SELECT COUNT(*) INTO :int1 FROM HU.ECCO;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM HU.ECCO;
             CALL "SUB15" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
             MOVE SQLSTATE TO olds
           PERFORM CHCKOK
             DISPLAY  " "
             MOVE 0 TO odsflg
             if (NORMSQ   =   "00000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               MOVE 1 TO odsflg
             END-IF

             COMPUTE smint1 = -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 " :smint1 = 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
      *    :smint1 = 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 "SUB16" USING SQLCODE SQLSTATE smint1 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 "smint1 should be 1; its value is ", smint1
             if (smint1  NOT =  1) then
               MOVE 0 TO flag
             END-IF
      *Verify RETURNED_SQLSTATE matches SELECT's SQLSTATE 
             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 P198
             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 P199
           .
        P198.
             DISPLAY "sco should NOT be 'ISO 9075 '; its value is ",
             sco
             if (sco   =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

           .
        P199.
      *0-length strings enforced in the VARCHAR test. 
      *Blanks expected here for fixed-length character string 
             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

      *Can't test much about these:  18.1 GR.3.k 

             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:  data exception -- division by zero 

             MOVE 0 TO int1
             DISPLAY "int1 = 0"
             DISPLAY "INSERT INTO HU.STAFF VALUES ("
             DISPLAY " '000', 'Loser', 1 / :int1, 'Baltimore');"
      *  EXEC SQL INSERT INTO HU.STAFF VALUES (
      *    '000', 'Loser', 1 / :int1, 'Baltimore');
             CALL "SUB17" USING SQLCODE SQLSTATE int1
             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 (SQLSTATE  NOT  =   "22012"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 "SUB18" 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 22012; its value is ", st
             if (st  NOT  =   "22012"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

      *Intentional duplication:  condition info should not have change

             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 "SUB19" 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 22012; its value is ", st
             if (st  NOT  =   "22012"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

      *Subtest 3:  column constraint violation 
      *18.1 GR.3.f 
      *Insert non-unique EMPNUM into HU.STAFF 

             DISPLAY "INSERT INTO HU.STAFF VALUES ("
             DISPLAY " 'E1', 'Bart', 10, 'Annapolis');"
      *  EXEC SQL INSERT INTO HU.STAFF VALUES (
      *    'E1', 'Bart', 10, 'Annapolis');
             CALL "SUB20" 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 23000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "23000"then
               MOVE 0 TO flag
             END-IF
             MOVE 0 TO odsflg
             if (NORMSQ   =   "23000"  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 "xx" TO cns
             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
             MOVE 1 TO int2
             DISPLAY "int2 = 1"
             DISPLAY "GET DIAGNOSTICS EXCEPTION :int2"
             DISPLAY " :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,"
             DISPLAY " :cns = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,"
             DISPLAY " :int1 = CONDITION_NUMBER, :st =
      -    " RETURNED_SQLSTATE,"
             DISPLAY " :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,"
             DISPLAY " :tnam = TABLE_NAME, :nl4 = COLUMN_NAME,"
             DISPLAY " :mlen = MESSAGE_LENGTH, :omlen =
      -    " MESSAGE_OCTET_LENGTH;"
      *  EXEC SQL GET DIAGNOSTICS EXCEPTION :int2
      *    :nl5 = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :cns = CONSTRAINT_SCHEMA, :snam = SCHEMA_NAME,
      *    :int1 = CONDITION_NUMBER, :st = RETURNED_SQLSTATE,
      *    :co = CLASS_ORIGIN, :sco = SUBCLASS_ORIGIN,
      *    :tnam = TABLE_NAME, :nl4 = COLUMN_NAME,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB21" USING SQLCODE SQLSTATE int2 nl5 mtxt 
             cns snam int1 st
             co sco tnam nl4 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 P197
             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 P196
           .
        P197.
             DISPLAY "sco should NOT be 'ISO 9075 '; its value is ",
             sco
             if (sco   =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

           .
        P196.
             DISPLAY "cns should be 'HU'; its value is '", cns "'"
             if (cns  NOT  =   "HU"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'; its value is '", tnam "'"
             if (tnam  NOT  =   "STAFF"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 4:  invalid cursor state 
      *18.1 GR.3.h 

             DISPLAY "DECLARE C12721 CURSOR FOR"
             DISPLAY " SELECT EMPNUM FROM HU.WORKS;"
      *  EXEC SQL DECLARE C12721 CURSOR FOR
      *    SELECT EMPNUM FROM HU.WORKS END-EXEC
             DISPLAY  " "

             DISPLAY "CLOSE C12721;"
      *  EXEC SQL CLOSE C12721;
             CALL "SUB22" 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 24000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "24000"then
               MOVE 0 TO flag
             END-IF
             MOVE 0 TO odsflg
             if (NORMSQ   =   "24000"  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 "x" TO nl2
             MOVE "x" TO nl3
             MOVE "x" TO nl4
             MOVE "xxxxxx" TO csrnam
             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 " :csrnam = 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,
      *    :csrnam = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB23" USING SQLCODE SQLSTATE int1 st co sco 
             nl1 nl2 nl3 nl4
             csrnam 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 P195
             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 P194
           .
        P195.
             DISPLAY "sco should NOT be 'ISO 9075 '; its value is ",
             sco
             if (sco   =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

           .
        P194.
             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 "csrnam should be 'C12721'; its value is '",
             csrnam "'"
             if (csrnam  NOT  =   "C12721"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 5: with check option violation 
      *18.1 GR.3.i 

             DISPLAY "INSERT INTO WCOV VALUES (0);"
      *  EXEC SQL INSERT INTO WCOV VALUES (0);
             CALL "SUB24" 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 44000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "44000"then
               MOVE 0 TO flag
             END-IF
             MOVE 0 TO odsflg
             if (NORMSQ   =   "44000"  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 "SUB25" 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 P193
             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 P192
           .
        P193.
             DISPLAY "sco should NOT be 'ISO 9075 '; its value is ",
             sco
             if (sco   =   "ISO 9075 "then
               MOVE 0 TO flag
             END-IF

           .
        P192.
             DISPLAY "nl1 should be ' '; its value is '", nl1 "'"
             if (nl1  NOT  =   " "then
               MOVE 0 TO flag
             END-IF
             DISPLAY "snam should be 'FLATER'; its value is '", snam "'"
             if (snam  NOT  =   "FLATER"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "tnam should be 'WCOV '; its value is '", tnam "'"
             if (tnam  NOT  =   "WCOV "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 6:  cursor operation conflict (18.1 GR.3.e) 

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

             DISPLAY "OPEN C12722;"
      *  EXEC SQL OPEN C12722;
             CALL "SUB26" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             DISPLAY "FETCH C12722 INTO :int1;"
      *  EXEC SQL FETCH C12722 INTO :int1;
             CALL "SUB27" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 is ", int1

             DISPLAY "DELETE FROM HU.STAFF WHERE CURRENT OF C12722;"
      *  EXEC SQL DELETE FROM HU.STAFF WHERE CURRENT OF C12722
      * ;
             CALL "SUB28" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DELETE FROM HU.STAFF;"
      *  EXEC SQL DELETE FROM HU.STAFF;
             CALL "SUB29" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be >= 0 (not 100); its value is ",
             SQL-COD
             DISPLAY "SQLSTATE should be 01001; its value is ", SQLSTATE
             MOVE SQLSTATE TO olds
             if (SQLCODE  <  0  OR  SQLCODE  =  100  OR  SQLSTATE  NOT 
             =   "01001"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 "xxxxxx" TO csrnam
             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 " :csrnam = 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,
      *    :csrnam = CURSOR_NAME, :mtxt = MESSAGE_TEXT,
      *    :mlen = MESSAGE_LENGTH, :omlen = MESSAGE_OCTET_LENGTH
      * ;
             CALL "SUB30" USING SQLCODE SQLSTATE int1 st co sco
                  nl1 nl2 nl3 nl4
             csrnam 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
             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 "csrnam should be 'C12722'; its value is '",
             csrnam "'"
             if (csrnam  NOT  =   "C12722"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 "SUB31" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB34" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0666 ********************
      **** 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.82 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