products/Sources/formale Sprachen/Cobol/Test-Suite/SQL P/dml100-186 image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

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

Datei: dml115.cob   Sprache: Cobol

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


      * EMBEDDED COBOL (file "DML106.PCO")


      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE 1993/08/20 EMBEDDED COBOL LANGUAGE                          
      * NIST SQL VALIDATION TEST SUITE V6.0                          
      *  DISCLAIMER:                                                  
      *  This program was written by employees of NIST to test SQL    
      *  implementations for conformance to the SQL standards.        
      *  NIST assumes no responsibility for any party's use of        
      *  this program.
      *                                                              
      * DML106.PCO                                                    
      * WRITTEN BY:  Joan Sullivan and David Flater                  
      * TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE
      *                                                              
      * This routine tests several FIPS features in Transitional     
      * SQL.  This is the non-dynamic version of DML107.             
      *                                                              
      * 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  ch15 PIC  X(15).
       01  ch3 PIC  X(3).
       01  int1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  int2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
             EXEC SQL END DECLARE SECTION END-EXEC
       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 END-EXEC
             MOVE SQLCODE TO SQL-COD
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
             if (uid  NOT  =   uidx) then
               DISPLAY "ERROR: User ", uid " expected. User ", uidx "
      -    " connected"
            STOP RUN
             END-IF
             MOVE 0 TO errcnt

             DISPLAY
           "SQL Test Suite, V6.0, Embedded COBOL, dml106.pco"
             DISPLAY
           "59-byte ID"
             DISPLAY "TEd Version #"
      *date_time print 
           ACCEPT TO-DAY FROM DATE
           ACCEPT THE-TIME FROM TIME
           DISPLAY "Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME

      ******************** BEGIN TEST0599 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0599 "
             DISPLAY " UNION in views (feature 8) (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
      -    " 8"
             DISPLAY " ANSI SQL-1992 11.19 "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "CREATE VIEW UUSIG (U1) AS"
             DISPLAY " SELECT C1 FROM USIG UNION SELECT C_1 FROM USIG;"
             EXEC SQL CREATE VIEW UUSIG (U1) AS
               SELECT C1 FROM USIG UNION SELECT C_1 FROM USIG END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM UUSIG;"
             EXEC SQL SELECT COUNT(*) INTO :int1 FROM UUSIG END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 4; its value is ", int1

             if (int1  NOT =  4) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(DISTINCT U1) INTO :int1 FROM UUSIG;"
             EXEC SQL SELECT COUNT(DISTINCT U1) INTO :int1 FROM UUSIG
             END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 4; its value is ", int1

             if (int1  NOT =  4) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM UUSIG WHERE U1 <
      -    " 0"
             DISPLAY " OR U1 > 3 OR U1 IS NULL;"
             EXEC SQL SELECT COUNT(*) INTO :int1 FROM UUSIG WHERE U1 < 0
               OR U1 > 3 OR U1 IS NULL END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 0; its value is ", int1

             if (int1  NOT =  0) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "CREATE VIEW ABOVE_AVERAGE (COLUMN_1, COLUMN_2,
      -    " COLUMN_3) AS"
             DISPLAY " SELECT PNUM, BUDGET, CITY"
             DISPLAY " FROM HU.PROJ OUTER_REF"
             DISPLAY " WHERE BUDGET >= (SELECT AVG(BUDGET) FROM
      -    " HU.PROJ INNER_REF"
             DISPLAY " WHERE OUTER_REF.CITY =
      -    " INNER_REF.CITY)"
             DISPLAY " UNION"
             DISPLAY " SELECT 'MAX', MAX(BUDGET), MIN(CITY)"
             DISPLAY " FROM HU.PROJ "
             DISPLAY " WHERE CITY > 'Deale';"
             EXEC SQL CREATE VIEW ABOVE_AVERAGE (COLUMN_1,
             COLUMN_2, COLUMN_3) AS
               SELECT PNUM, BUDGET, CITY
               FROM HU.PROJ OUTER_REF
               WHERE BUDGET >= (SELECT AVG(BUDGET) FROM HU.PROJ
             INNER_REF
               WHERE OUTER_REF.CITY = INNER_REF.CITY)
               UNION
               SELECT 'MAX', MAX(BUDGET), MIN(CITY)
               FROM HU.PROJ 
               WHERE CITY > 'Deale' END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE UNION1 CURSOR FOR"
             DISPLAY " SELECT * FROM ABOVE_AVERAGE ORDER BY COLUMN_1;"
             EXEC SQL DECLARE UNION1 CURSOR FOR
               SELECT * FROM ABOVE_AVERAGE ORDER BY COLUMN_1 END-EXEC

             DISPLAY "OPEN UNION1;"
             EXEC SQL OPEN UNION1 END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             MOVE "xxx" TO ch3
             COMPUTE int1 = -1
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
             EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch3 should be 'MAX'; its value is ", ch3
             DISPLAY "int1 should be 30000; its value is ", int1
             DISPLAY "ch15 should be 'Tampa'; its value is ", ch15
             if (ch3  NOT  =   "MAX"  OR  int1  NOT = 30000  OR  ch15 
             NOT  =   "Tampa "then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             COMPUTE int1 = -1
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
             EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch3 should be 'P2 '; its value is ", ch3
             DISPLAY "int1 should be 30000; its value is ", int1
             DISPLAY "ch15 should be 'Vienna'; its value is ", ch15
             if (ch3  NOT  =   "P2 "  OR  int1  NOT = 30000  OR  ch15 
             NOT  =   "Vienna "then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             COMPUTE int1 = -1
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
             EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch3 should be 'P3 '; its value is ", ch3
             DISPLAY "int1 should be 30000; its value is ", int1
             DISPLAY "ch15 should be 'Tampa'; its value is ", ch15
             if (ch3  NOT  =   "P3 "  OR  int1  NOT = 30000  OR  ch15 
             NOT  =   "Tampa "then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             COMPUTE int1 = -1
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
             EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch3 should be 'P6 '; its value is ", ch3
             DISPLAY "int1 should be 50000; its value is ", int1
             DISPLAY "ch15 should be 'Deale'; its value is ", ch15
             if (ch3  NOT  =   "P6 "  OR  int1  NOT = 50000  OR  ch15 
             NOT  =   "Deale "then
               MOVE 0 TO flag
             END-IF

             DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
             EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15 END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
             if (SQLCODE  NOT =  100) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "


             DISPLAY " CREATE VIEW STAFF_DUP AS"
             DISPLAY " SELECT EMPNUM, EMPNAME, GRADE, CITY"
             DISPLAY " FROM HU.STAFF"
             DISPLAY " UNION ALL"
             DISPLAY " SELECT * FROM HU.STAFF3;"
             EXEC SQL CREATE VIEW STAFF_DUP AS
               SELECT EMPNUM, EMPNAME, GRADE, CITY
               FROM HU.STAFF
               UNION ALL
               SELECT * FROM HU.STAFF3 END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "


             DISPLAY "DECLARE UNION2 CURSOR FOR"
             DISPLAY " SELECT EMPNUM, CITY FROM STAFF_DUP ORDER BY
      -    " CITY;"
             EXEC SQL DECLARE UNION2 CURSOR FOR
               SELECT EMPNUM, CITY FROM STAFF_DUP ORDER BY CITY END-EXEC

             DISPLAY "OPEN UNION2;"
             EXEC SQL OPEN UNION2 END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION2 INTO :ch3, :ch15;"
             EXEC SQL FETCH UNION2 INTO :ch3, :ch15 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch3 should be 'E5 '; its value is ", ch3
             DISPLAY "ch15 should be 'Akron'; its value is ", ch15
             if (ch3  NOT  =   "E5 "  OR  ch15  NOT  =   "Akron
      -    " "then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION2 INTO :ch3, :ch15;"
             EXEC SQL FETCH UNION2 INTO :ch3, :ch15 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch3 should be 'E5 '; its value is ", ch3
             DISPLAY "ch15 should be 'Akron'; its value is ", ch15
             if (ch3  NOT  =   "E5 "  OR  ch15  NOT  =   "Akron
      -    " "then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM STAFF_DUP;"
             EXEC SQL SELECT COUNT(*) INTO :int1 FROM STAFF_DUP END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 10; its value is ", int1

             if (int1  NOT =  10) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "


             DISPLAY "CREATE VIEW FOUR_CITIES (C1, C2, C3) AS"
             DISPLAY " SELECT 'P', CITY, 666"
             DISPLAY " FROM HU.PROJ"
             DISPLAY " WHERE BUDGET <> 30000"
             DISPLAY " UNION"
             DISPLAY " SELECT 'S', CITY, 777"
             DISPLAY " FROM HU.STAFF"
             DISPLAY " WHERE EMPNAME <> 'Ed'"
             DISPLAY " UNION"
             DISPLAY " SELECT 'T', CITY, -999"
             DISPLAY " FROM HU.STAFF3"
             DISPLAY " WHERE CITY NOT LIKE 'V"
             DISPLAY " UNION"
             DISPLAY " SELECT 'X', CITY, -1"
             DISPLAY " FROM HU.STAFF3"
             DISPLAY " WHERE CITY = 'Vienna';"
             EXEC SQL CREATE VIEW FOUR_CITIES (C1, C2, C3) AS
               SELECT 'P', CITY, 666
               FROM HU.PROJ
               WHERE BUDGET <> 30000
               UNION
               SELECT 'S', CITY, 777
               FROM HU.STAFF
               WHERE EMPNAME <> 'Ed'
               UNION
               SELECT 'T', CITY, -999
               FROM HU.STAFF3
               WHERE CITY NOT LIKE 'V%'
               UNION
               SELECT 'X', CITY, -1
               FROM HU.STAFF3
               WHERE CITY = 'Vienna' END-EXEC
             MOVE SQLCODE TO SQL-COD

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE UNION3 CURSOR FOR"
             DISPLAY " SELECT C2, C1, C3 FROM FOUR_CITIES ORDER BY C3,
      -    " C2;"
             EXEC SQL DECLARE UNION3 CURSOR FOR
               SELECT C2, C1, C3 FROM FOUR_CITIES ORDER BY C3, C2
             END-EXEC

             DISPLAY "OPEN UNION3;"
             EXEC SQL OPEN UNION3 END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
             EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch15 should be 'Akron'; its value is ", ch15
             DISPLAY "ch3 should be 'T'; its value is ", ch3
             DISPLAY "int1 should be -999; its value is ", int1
             if (ch15  NOT  =   "Akron "  OR  ch3  NOT  =   "T
      -    " "  OR  int1  NOT =  -999) then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
             EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch15 should be 'Deale'; its value is ", ch15
             DISPLAY "ch3 should be 'T'; its value is ", ch3
             DISPLAY "int1 should be -999; its value is ", int1
             if (ch15  NOT  =   "Deale "  OR  ch3  NOT  =   "T
      -    " "  OR  int1  NOT =  -999) then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
             EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch15 should be 'Vienna'; its value is ", ch15
             DISPLAY "ch3 should be 'X'; its value is ", ch3
             DISPLAY "int1 should be -1; its value is ", int1
             if (ch15  NOT  =   "Vienna "  OR  ch3  NOT  =   "X
      -    " "  OR  int1  NOT =  -1) then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
             EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch15 should be 'Deale'; its value is ", ch15
             DISPLAY "ch3 should be 'P'; its value is ", ch3
             DISPLAY "int1 should be 666; its value is ", int1
             if (ch15  NOT  =   "Deale "  OR  ch3  NOT  =   "P
      -    " "  OR  int1  NOT =  666) then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
             EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch15 should be 'Vienna'; its value is ", ch15
             DISPLAY "ch3 should be 'P'; its value is ", ch3
             DISPLAY "int1 should be 666; its value is ", int1
             if (ch15  NOT  =   "Vienna "  OR  ch3  NOT  =   "P
      -    " "  OR  int1  NOT =  666) then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
             EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch15 should be 'Deale'; its value is ", ch15
             DISPLAY "ch3 should be 'S'; its value is ", ch3
             DISPLAY "int1 should be 777; its value is ", int1
             if (ch15  NOT  =   "Deale "  OR  ch3  NOT  =   "S
      -    " "  OR  int1  NOT =  777) then
               MOVE 0 TO flag
             END-IF

             MOVE "xxx" TO ch3
             MOVE "xxxxxxxxxxxxxxx" TO ch15
             DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
             EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch15 should be 'Vienna'; its value is ", ch15
             DISPLAY "ch3 should be 'S'; its value is ", ch3
             DISPLAY "int1 should be 777; its value is ", int1
             if (ch15  NOT  =   "Vienna "  OR  ch3  NOT  =   "S
      -    " "  OR  int1  NOT =  777) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
             EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1 END-EXEC
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
             if (SQLCODE  NOT =  100) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT (*) INTO :int1 FROM FOUR_CITIES;"
             EXEC SQL SELECT COUNT (*) INTO :int1 FROM FOUR_CITIES
             END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 7; its value is ", int1

             if (int1  NOT =  7) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM FOUR_CITIES WHERE
      -    " C3 > 0;"
             EXEC SQL SELECT COUNT(*) INTO :int1 FROM FOUR_CITIES WHERE
             C3 > 0 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 4; its value is ", int1

             if (int1  NOT =  4) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM FOUR_CITIES WHERE
      -    " C2 = 'Vienna';"
             EXEC SQL SELECT COUNT(*) INTO :int1 FROM FOUR_CITIES WHERE
             C2 = 'Vienna' END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 3; its value is ", int1

             if (int1  NOT =  3) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP VIEW ABOVE_AVERAGE CASCADE;"
             EXEC SQL DROP VIEW ABOVE_AVERAGE CASCADE END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP VIEW STAFF_DUP CASCADE;"
             EXEC SQL DROP VIEW STAFF_DUP CASCADE END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP VIEW FOUR_CITIES CASCADE;"
             EXEC SQL DROP VIEW FOUR_CITIES CASCADE END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP VIEW UUSIG CASCADE;"
             EXEC SQL DROP VIEW UUSIG CASCADE END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

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

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0599 ********************
      ******************** BEGIN TEST0601 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0601 "
             DISPLAY " DATETIME data types (feature 5) (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
      -    " 5"
             DISPLAY " ANSI SQL-1992 6.1 "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "CREATE TABLE TEMPUS (TDATE DATE, TTIME TIME,"
             DISPLAY " TTIMESTAMP TIMESTAMP, TINT1 INTERVAL YEAR TO
      -    " MONTH,"
             DISPLAY " TINT2 INTERVAL DAY TO SECOND);"
             EXEC SQL CREATE TABLE TEMPUS (TDATE DATE, TTIME
             TIME,
               TTIMESTAMP TIMESTAMP, TINT1 DATE,
               TINT2 DATEEND-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO TEMPUS VALUES ("
             DISPLAY " DATE '1993-08-24',"
             DISPLAY " TIME '16:03:00',"
             DISPLAY " TIMESTAMP '1993-08-24 16:03:00',"
             DISPLAY " INTERVAL -'1-6' YEAR TO MONTH,"
             DISPLAY " INTERVAL '13 0:10' DAY TO SECOND);"
             EXEC SQL INSERT INTO TEMPUS VALUES (
               '1993-08-24',
               '16:03:00',
               TIMESTAMP '1993-08-24 16:03:00',
               '1-6',
               '13 0:10'END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             DISPLAY "SELECT EXTRACT (DAY FROM TDATE)"
             DISPLAY " INTO :int1 FROM TEMPUS;"
             EXEC SQL SELECT EXTRACT
               INTO :int1 FROM TEMPUS END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 24; its value is ", int1
             if (int1  NOT =  24) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM TEMPUS"
             DISPLAY " WHERE (TTIMESTAMP - TIMESTAMP '1995-02-24
      -    " 16:03:00')"
             DISPLAY " YEAR TO MONTH = TINT1;"
             EXEC SQL SELECT COUNT(*) INTO :int1 FROM TEMPUS
               WHERE (TTIMESTAMP - TIMESTAMP '1995-02-24 16:03:00')
               = TINT1 END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM TEMPUS"
             DISPLAY " WHERE (TTIMESTAMP, TINT1) OVERLAPS"
             DISPLAY " (TIMESTAMP '1995-02-24 16:03:00',
      -      " INTERVAL '1-6' YEAR TO MONTH);"
             EXEC SQL SELECT COUNT(*) INTO :int1 FROM TEMPUS
               WHERE (TTIMESTAMP, TINT1) =
               (TIMESTAMP '1995-02-24 16:03:00''1-6' 
               ) END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 0; its value is ", int1
             if (int1  NOT =  0) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "ROLLBACK WORK;"
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE TEMPUS CASCADE;"
             EXEC SQL DROP TABLE TEMPUS CASCADE END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

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

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0601 ********************
      ******************** BEGIN TEST0611 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0611 "
             DISPLAY " FIPS sizing, DATETIME data types (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
      -    " 5"
             DISPLAY " ANSI SQL-1992 6.1 SR.25-26"
             DISPLAY " LR.1.a"
             DISPLAY " 10.1 SR 3&4"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *6.1 LR.1.a denies us the right to use <time precision> or  
      *<timestamp precision> in the declaration.  SR.25 says that 
      *<time precision> defaults to 0 and <timestamp precision>   
      *defaults to 6.                                             

             DISPLAY "CREATE TABLE TSFIPS ("
             DISPLAY " FIPS1 TIME,"
             DISPLAY " FIPS2 TIMESTAMP,"
             DISPLAY " FIPS3 INTERVAL YEAR (2) TO MONTH,"
             DISPLAY " FIPS4 INTERVAL DAY (2) TO SECOND (6));"
             EXEC SQL CREATE TABLE TSFIPS (
               FIPS1 TIME,
               FIPS2 TIMESTAMP,
               FIPS3 DATE,
               FIPS4 DATEEND-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO TSFIPS VALUES ("
             DISPLAY " TIME '16:03:00',"
             DISPLAY " TIMESTAMP '1996-08-24 16:03:00.999999',"
             DISPLAY " INTERVAL -'99-6' YEAR (2) TO MONTH,"
             DISPLAY " INTERVAL '99 0:10:00.999999' DAY (2) TO SECOND
      -    " (6));"
             EXEC SQL INSERT INTO TSFIPS VALUES (
               '16:03:00',
               TIMESTAMP '1996-08-24 16:03:00.999999',
               '99-6',
               '99 0:10:00.999999')
             END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             DISPLAY "SELECT EXTRACT (SECOND FROM FIPS2)"
             DISPLAY " * 1000000 - 999990 INTO :int1 FROM TSFIPS;"
             EXEC SQL SELECT EXTRACT 
               * 1000000 - 999990 INTO :int1 FROM TSFIPS END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 9; its value is ", int1
             if (int1  NOT =  9) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             DISPLAY "SELECT EXTRACT (YEAR FROM FIPS3),"
             DISPLAY " EXTRACT (MONTH FROM FIPS3) INTO :int1, :int2"
             DISPLAY " FROM TSFIPS;"
             EXEC SQL SELECT EXTRACT,
               EXTRACT INTO :int1, :int2
               FROM TSFIPS END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be -99; its value is ", int1
             DISPLAY "int2 should be -6; its value is ", int2
             DISPLAY "Note: The sign is specified by Subclause 6.6
      -    " GR.3.a.i"
             DISPLAY " in ANSI SQL-1992."
             if (int1  NOT =  -99  OR  int2  NOT =  -6) then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             DISPLAY "SELECT EXTRACT (DAY FROM FIPS4),"
             DISPLAY " EXTRACT (SECOND FROM FIPS4) * 1000000 - 999990"
             DISPLAY " INTO :int1, :int2 FROM TSFIPS;"
             EXEC SQL SELECT EXTRACT,
               EXTRACT * 1000000 - 999990
               INTO :int1, :int2 FROM TSFIPS END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 99; its value is ", int1
             DISPLAY "int2 should be 9; its value is ", int2
             if (int1  NOT =  99  OR  int2  NOT =  9) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "ROLLBACK WORK;"
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE TSFIPS CASCADE;"
             EXEC SQL DROP TABLE TSFIPS CASCADE END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

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

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0611 ********************
      ******************** BEGIN TEST0613 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0613 "
             DISPLAY " (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL features
      -    " 5, 20"
             DISPLAY " ANSI SQL-1992 6.8 "
             DISPLAY " 6.8 GR.3"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *Support for timezones is not included in Transitional SQL 

             DISPLAY "CREATE TABLE TSSMALL ("
             DISPLAY " SMALLD DATE,"
             DISPLAY " SMALLT TIME,"
             DISPLAY " SMALLTS TIMESTAMP);"

             EXEC SQL CREATE TABLE TSSMALL (
               SMALLD DATE,
               SMALLT TIME,
               SMALLTS TIMESTAMP) END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO TSSMALL VALUES ("
             DISPLAY " CURRENT_DATE, CURRENT_TIME, "
             DISPLAY "CURRENT_TIMESTAMP);"

             EXEC SQL INSERT INTO TSSMALL VALUES (
               CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP) END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY "FROM TSSMALL WHERE"
             DISPLAY "EXTRACT (YEAR FROM SMALLD) = EXTRACT (YEAR FROM
      -    " SMALLTS);"

             COMPUTE int1 = -1
             EXEC SQL SELECT COUNT(*) INTO :int1
               FROM TSSMALL WHERE
               EXTRACT = YEAR
             END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY "FROM TSSMALL WHERE"
             DISPLAY "EXTRACT (MONTH FROM SMALLD) = EXTRACT (MONTH FROM
      -    " SMALLTS);"

             COMPUTE int1 = -1
             EXEC SQL SELECT COUNT(*) INTO :int1
               FROM TSSMALL WHERE
               EXTRACT = MONTH
             END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY "FROM TSSMALL WHERE"
             DISPLAY "EXTRACT (DAY FROM SMALLD) = EXTRACT (DAY FROM
      -    " SMALLTS);"

             COMPUTE int1 = -1
             EXEC SQL SELECT COUNT(*) INTO :int1
               FROM TSSMALL WHERE
               EXTRACT = DAY
             END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY "FROM TSSMALL WHERE"
             DISPLAY "EXTRACT (HOUR FROM SMALLT) = EXTRACT (HOUR FROM
      -    " SMALLTS);"

             COMPUTE int1 = -1
             EXEC SQL SELECT COUNT(*) INTO :int1
               FROM TSSMALL WHERE
               HOUR = EXTRACT
             END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY "FROM TSSMALL WHERE"
             DISPLAY "EXTRACT (MINUTE FROM SMALLT) = EXTRACT (MINUTE
      -    " FROM SMALLTS);"

             COMPUTE int1 = -1
             EXEC SQL SELECT COUNT(*) INTO :int1
               FROM TSSMALL WHERE
               MINUTE = 
             SMALLTS END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF

      *Time and timestamp have different fractional seconds precision 
      *and we can't assume truncation or rounding.                    

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY "FROM TSSMALL WHERE"
             DISPLAY "EXTRACT (SECOND FROM SMALLT) -"
             DISPLAY "EXTRACT (SECOND FROM SMALLTS) > -1"
             DISPLAY "AND EXTRACT (SECOND FROM SMALLT) -"
             DISPLAY "EXTRACT (SECOND FROM SMALLTS) < 1;"
             EXEC SQL SELECT COUNT(*) INTO :int1
               FROM TSSMALL WHERE
               SECOND -
               SECOND > -1
               and SECOND -
               SECOND < 1 END-EXEC
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 1; its value is ", int1
             if (int1  NOT =  1) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "ROLLBACK WORK;"
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE TSSMALL CASCADE;"
             EXEC SQL DROP TABLE TSSMALL CASCADE END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

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

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0613 ********************
      ******************** BEGIN TEST0615 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0615 "
             DISPLAY " DATETIME-related SQLSTATE codes (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL features
      -    " 5, 20"
             DISPLAY " ANSI SQL-1992 22.1 SQLSTATE"
             DISPLAY " 6.14 GR.3.c"
             DISPLAY " 9.2 GR.3.m"
             DISPLAY " COR1 for 6.10 GR.9.a.ii GR.10.a.ii GR.11.a.ii"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *If this test is rejected at compile time for some reason which 
      *resembles the desired SQLSTATEs, you win.                      

      *Datetime field overflow = 22008:  add a one-year interval to   
      *    YEAR 9999 datetime (6.14 GR.3.c)                           
      *Interval field overflow = 22015:  insert interval with too     
      *    many digits in leading field (9.2 GR.3.m)                  
      *Invalid datetime format = 22007:  cast February 30 to datetime 
      *    (COR1 for 6.10 GR 9.a.ii, 10.a.ii, 11.a.ii)                

             DISPLAY "CREATE TABLE TSERR ("
             DISPLAY " BADINT INTERVAL YEAR (2) TO MONTH,"
             DISPLAY " BADDATE DATE);"

             EXEC SQL CREATE TABLE TSERR (
               BADINT TIME,
               BADDATE DATEEND-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *                   NOTICE                             
      *The Standard is very clear on the fact that the YEAR  
      *field can't accept values below 1 or above 9999 in    
      *datetime items (see Table 10 and 6.14 GR.3.c).        
      *However, since it seems to us that a reasonable       
      *human being might want to implement YEAR with a       
      *small integer and permit the larger range to be used, 
      *you may replace the 9999 in the date literal below    
      *with as large an integer as you require to generate   
      *the specified error condition.  This offer is null    
      *and void if the range limitation on YEAR is upheld by 
      *an official interpretation.                           

      *DML106 TEd Hook #1 

             DISPLAY "INSERT INTO TSERR VALUES ("
             DISPLAY " INTERVAL '0-11' YEAR TO MONTH,"
             DISPLAY " DATE '9999-01-01' + INTERVAL '1-00' YEAR TO
      -    " MONTH);"

             EXEC SQL INSERT INTO TSERR VALUES (
               '0-11',
               '9999-01-01' + '1-00')
             END-EXEC
             MOVE SQLCODE TO SQL-COD

      *DML106 TEd Hook #2 

             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 22008; its value is ", SQLSTATE
             if (SQLSTATE  NOT  =   "22008"then
               MOVE 0 TO flag
             END-IF

             DISPLAY "INSERT INTO TSERR VALUES ("
             DISPLAY " INTERVAL '9999-11' YEAR TO MONTH,"
             DISPLAY " DATE '1984-01-01');"

             EXEC SQL INSERT INTO TSERR VALUES (
               '9999-11',
               '1984-01-01'END-EXEC
             MOVE SQLCODE TO SQL-COD

      *DML106 TEd Hook #3 

             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 22015; its value is ", SQLSTATE
             if (SQLSTATE  NOT  =   "22015"then
               MOVE 0 TO flag
             END-IF

             DISPLAY "INSERT INTO TSERR VALUES ("
             DISPLAY " INTERVAL '1-11' YEAR TO MONTH,"
             DISPLAY " CAST ('DATE ''1993-02-30''' AS DATE));"

             EXEC SQL INSERT INTO TSERR VALUES (
               '1-11',
               CAST ('DATE ''1993-02-30''' AS DATE)) END-EXEC
             MOVE SQLCODE TO SQL-COD

             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             if (SQLCODE  NOT <  0) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "SQLSTATE should be 22007; its value is ", SQLSTATE
             if (SQLSTATE  NOT  =   "22007"then
               MOVE 0 TO flag
             END-IF

      *The above could be passed for the wrong reason if the uglified 
      *syntax is not supported.  Repeat with shorter syntax.          

             DISPLAY "INSERT INTO TSERR VALUES ("
             DISPLAY " INTERVAL '1-11' YEAR TO MONTH,"
             DISPLAY " CAST ('1993-02-30' AS DATE));"

             EXEC SQL INSERT INTO TSERR VALUES (
               '1-11',
               CAST ('1993-02-30' AS DATE)) END-EXEC
             MOVE SQLCODE TO SQL-COD

             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             if (SQLCODE  NOT <  0) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "SQLSTATE should be 22007; its value is ", SQLSTATE
             if (SQLSTATE  NOT  =   "22007"then
               MOVE 0 TO flag
             END-IF

             DISPLAY "ROLLBACK WORK;"
             EXEC SQL ROLLBACK WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE TSERR CASCADE;"
             EXEC SQL DROP TABLE TSERR CASCADE END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

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

             EXEC SQL COMMIT WORK END-EXEC
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0615 ********************
      **** 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.89 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