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: dml041.mco   Sprache: Cobol

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


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


      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE 1993/08/20 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.
      *                                                              
      * DML106.SCO                                                    
      * WRITTEN BY:  Joan Sullivan and David Flater                  
      * TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL 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;
             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, dml106.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 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;
             CALL "SUB3" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB4" USING SQLCODE SQLSTATE
             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;
             CALL "SUB5" USING SQLCODE SQLSTATE int1
             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
      * ;
             CALL "SUB6" USING SQLCODE SQLSTATE int1
             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;
             CALL "SUB7" USING SQLCODE SQLSTATE int1
             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;
             CALL "SUB8" USING SQLCODE SQLSTATE
             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';
             CALL "SUB9" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB10" USING SQLCODE SQLSTATE
             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;
             CALL "SUB11" USING SQLCODE SQLSTATE
             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;
             CALL "SUB12" USING SQLCODE SQLSTATE ch3 int1 ch15
             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;
             CALL "SUB13" USING SQLCODE SQLSTATE ch3 int1 ch15
             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;
             CALL "SUB14" USING SQLCODE SQLSTATE ch3 int1 ch15
             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;
             CALL "SUB15" USING SQLCODE SQLSTATE ch3 int1 ch15
             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;
             CALL "SUB16" USING SQLCODE SQLSTATE ch3 int1 ch15
             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;
             CALL "SUB17" USING SQLCODE SQLSTATE
             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;
             CALL "SUB18" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB19" USING SQLCODE SQLSTATE
             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;
             CALL "SUB20" USING SQLCODE SQLSTATE
             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;
             CALL "SUB21" USING SQLCODE SQLSTATE ch3 ch15
             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;
             CALL "SUB22" USING SQLCODE SQLSTATE ch3 ch15
             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;
             CALL "SUB23" USING SQLCODE SQLSTATE int1
             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;
             CALL "SUB24" USING SQLCODE SQLSTATE
             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';
             CALL "SUB25" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB26" USING SQLCODE SQLSTATE
             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;
             CALL "SUB27" USING SQLCODE SQLSTATE
             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;
             CALL "SUB28" USING SQLCODE SQLSTATE ch15 ch3 int1
             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;
             CALL "SUB29" USING SQLCODE SQLSTATE ch15 ch3 int1
             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;
             CALL "SUB30" USING SQLCODE SQLSTATE ch15 ch3 int1
             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;
             CALL "SUB31" USING SQLCODE SQLSTATE ch15 ch3 int1
             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;
             CALL "SUB32" USING SQLCODE SQLSTATE ch15 ch3 int1
             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;
             CALL "SUB33" USING SQLCODE SQLSTATE ch15 ch3 int1
             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;
             CALL "SUB34" USING SQLCODE SQLSTATE ch15 ch3 int1
             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;
             CALL "SUB35" USING SQLCODE SQLSTATE ch15 ch3 int1
             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
      * ;
             CALL "SUB36" USING SQLCODE SQLSTATE int1
             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;
             CALL "SUB37" USING SQLCODE SQLSTATE int1
             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';
             CALL "SUB38" USING SQLCODE SQLSTATE int1
             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;
             CALL "SUB39" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP VIEW ABOVE_AVERAGE CASCADE;"
      *  EXEC SQL DROP VIEW ABOVE_AVERAGE CASCADE;
             CALL "SUB40" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP VIEW STAFF_DUP CASCADE;"
      *  EXEC SQL DROP VIEW STAFF_DUP CASCADE;
             CALL "SUB42" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP VIEW FOUR_CITIES CASCADE;"
      *  EXEC SQL DROP VIEW FOUR_CITIES CASCADE;
             CALL "SUB44" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP VIEW UUSIG CASCADE;"
      *  EXEC SQL DROP VIEW UUSIG CASCADE;
             CALL "SUB46" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB50" USING SQLCODE SQLSTATE
             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 INTERVAL YEAR TO MONTH,
      *    TINT2 INTERVAL DAY TO SECOND);
             CALL "SUB51" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB52" USING SQLCODE SQLSTATE
             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 (
      *    DATE '1993-08-24',
      *    TIME '16:03:00',
      *    TIMESTAMP '1993-08-24 16:03:00',
      *    INTERVAL -'1-6' YEAR TO MONTH,
      *    INTERVAL '13 0:10' DAY TO SECOND);
             CALL "SUB53" USING SQLCODE SQLSTATE
             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 (DAY FROM TDATE)
      *    INTO :int1 FROM TEMPUS;
             CALL "SUB54" USING SQLCODE SQLSTATE int1
             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')
      *    YEAR TO MONTH = TINT1;
             CALL "SUB55" USING SQLCODE SQLSTATE int1
             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) OVERLAPS
      *    (TIMESTAMP '1995-02-24 16:03:00', INTERVAL '1-6' 
      *    YEAR TO MONTH);
             CALL "SUB56" USING SQLCODE SQLSTATE int1
             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;
             CALL "SUB57" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE TEMPUS CASCADE;"
      *  EXEC SQL DROP TABLE TEMPUS CASCADE;
             CALL "SUB58" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB62" USING SQLCODE SQLSTATE
             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 INTERVAL YEAR (2) TO MONTH,
      *    FIPS4 INTERVAL DAY (2) TO SECOND (6));
             CALL "SUB63" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB64" USING SQLCODE SQLSTATE
             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 (
      *    TIME '16:03:00',
      *    TIMESTAMP '1996-08-24 16:03:00.999999',
      *    INTERVAL -'99-6' YEAR (2) TO MONTH,
      *    INTERVAL '99 0:10:00.999999' DAY (2) TO SECOND (6))
      * ;
             CALL "SUB65" USING SQLCODE SQLSTATE
             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 (SECOND FROM FIPS2)
      *    * 1000000 - 999990 INTO :int1 FROM TSFIPS;
             CALL "SUB66" USING SQLCODE SQLSTATE int1
             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 (YEAR FROM FIPS3),
      *    EXTRACT (MONTH FROM FIPS3) INTO :int1, :int2
      *    FROM TSFIPS;
             CALL "SUB67" USING SQLCODE SQLSTATE int1 int2
             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 (DAY FROM FIPS4),
      *    EXTRACT (SECOND FROM FIPS4) * 1000000 - 999990
      *    INTO :int1, :int2 FROM TSFIPS;
             CALL "SUB68" USING SQLCODE SQLSTATE int1 int2
             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;
             CALL "SUB69" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE TSFIPS CASCADE;"
      *  EXEC SQL DROP TABLE TSFIPS CASCADE;
             CALL "SUB70" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB74" USING SQLCODE SQLSTATE
             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);
             CALL "SUB75" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB76" USING SQLCODE SQLSTATE
             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);
             CALL "SUB77" USING SQLCODE SQLSTATE
             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 FROM SMALLD) = EXTRACT (YEAR FROM SMALLTS)
      * ;
             CALL "SUB78" USING SQLCODE SQLSTATE int1
             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 FROM SMALLD) = EXTRACT (MONTH FROM
      *  SMALLTS);
             CALL "SUB79" USING SQLCODE SQLSTATE int1
             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 FROM SMALLD) = EXTRACT (DAY FROM SMALLTS)
      * ;
             CALL "SUB80" USING SQLCODE SQLSTATE int1
             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
      *    EXTRACT (HOUR FROM SMALLT) = EXTRACT (HOUR FROM SMALLTS)
      * ;
             CALL "SUB81" USING SQLCODE SQLSTATE int1
             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
      *    EXTRACT (MINUTE FROM SMALLT) = EXTRACT (MINUTE FROM
      *  SMALLTS);
             CALL "SUB82" USING SQLCODE SQLSTATE int1
             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
      *    EXTRACT (SECOND FROM SMALLT) -
      *    EXTRACT (SECOND FROM SMALLTS) > -1
      *    AND EXTRACT (SECOND FROM SMALLT) -
      *    EXTRACT (SECOND FROM SMALLTS) < 1;
             CALL "SUB83" USING SQLCODE SQLSTATE int1
             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;
             CALL "SUB84" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE TSSMALL CASCADE;"
      *  EXEC SQL DROP TABLE TSSMALL CASCADE;
             CALL "SUB85" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB89" USING SQLCODE SQLSTATE
             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 INTERVAL YEAR (2) TO MONTH,
      *    BADDATE DATE);
             CALL "SUB90" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB91" USING SQLCODE SQLSTATE
             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 (
      *    INTERVAL '0-11' YEAR TO MONTH,
      *    DATE '9999-01-01' + INTERVAL '1-00' YEAR TO MONTH)
      * ;
             CALL "SUB92" USING SQLCODE SQLSTATE
             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 (
      *    INTERVAL '9999-11' YEAR TO MONTH,
      *    DATE '1984-01-01');
             CALL "SUB93" USING SQLCODE SQLSTATE
             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 (
      *    INTERVAL '1-11' YEAR TO MONTH,
      *    CAST ('DATE ''1993-02-30''' AS DATE));
             CALL "SUB94" 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

             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 (
      *    INTERVAL '1-11' YEAR TO MONTH,
      *    CAST ('1993-02-30' AS DATE));
             CALL "SUB95" 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

             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;
             CALL "SUB96" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DROP TABLE TSERR CASCADE;"
      *  EXEC SQL DROP TABLE TSERR CASCADE;
             CALL "SUB97" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB101" USING SQLCODE SQLSTATE
             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.73 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