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

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


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


      ****************************************************************
      *                                                              
      *                 COMMENT SECTION                              
      *                                                              
      * DATE 1993/11/10 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.
      *                                                              
      * DML112.SCO                                                    
      * WRITTEN BY:  David W. Flater                                 
      * TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE
      *                                                              
      * This routine tests NULLs with DATETIME data types and in     
      * outer joins, datetimes in a <default clause>, TRIM, and also 
      * some schema manipulation statements.                         
      * This is the non-dynamic version of DML113.PC.                
      *                                                              
      * REFERENCES                                                   
      *   FIPS PUB 127-2 14.1 Transitional SQL                       
      *   ANSI SQL-1992                                              
      *                                                              
      ****************************************************************



      * EXEC SQL BEGIN DECLARE SECTION END-EXEC
       01  SQLCODE PIC S9(9) COMP.
       01  SQLSTATE PIC  X(5).
       01  uid PIC  X(18).
       01  uidx PIC  X(18).
       01  int1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  int2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
       01  indic1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
       01  chx PIC  X(1).
       01  ch3 PIC  X(2).
       01  ch9 PIC  X(9).
       01  ch10 PIC  X(10).
       01  chtime PIC  X(8).
       01  ch1 PIC  X(11).
       01  ch2 PIC  X(14).
      *  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, dml112.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 TEST0621 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0621 "
             DISPLAY " DATETIME NULLs (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL features
      -    " 5,20"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "CREATE TABLE MERCH ("
             DISPLAY " ITEMKEY INT,"
             DISPLAY " ORDERED DATE,"
             DISPLAY " RDATE DATE,"
             DISPLAY " RTIME TIME,"
             DISPLAY " SOLD TIMESTAMP);"

      *  EXEC SQL CREATE TABLE MERCH (
      *    ITEMKEY INT,
      *    ORDERED DATE,
      *    RDATE DATE,
      *    RTIME TIME,
      *    SOLD TIMESTAMP);
             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  " "

             DISPLAY "CREATE TABLE TURNAROUND ("
             DISPLAY " ITEMKEY INT,"
             DISPLAY " MWAIT INTERVAL MONTH,"
             DISPLAY " DWAIT INTERVAL DAY TO HOUR);"

      *  EXEC SQL CREATE TABLE TURNAROUND (
      *    ITEMKEY INT,
      *    MWAIT INTERVAL MONTH,
      *    DWAIT INTERVAL DAY TO HOUR);
             CALL "SUB5" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Do this with an outer join in a combined test later. 
      *For FSQL, use SELECT DISTINCT (all that stuff)       

             DISPLAY "CREATE VIEW INVENTORY AS"
             DISPLAY " SELECT MERCH.ITEMKEY AS ITEMKEY, ORDERED,"
             DISPLAY " MWAIT, DWAIT FROM MERCH, TURNAROUND COR1 WHERE
      -    " RDATE"
             DISPLAY " IS NOT NULL AND SOLD IS NULL AND"
             DISPLAY " MERCH.ITEMKEY = COR1.ITEMKEY"
             DISPLAY " UNION"
             DISPLAY " SELECT ITEMKEY, ORDERED,"
             DISPLAY " CAST (NULL AS INTERVAL MONTH),"
             DISPLAY " CAST (NULL AS INTERVAL DAY TO HOUR) FROM"
             DISPLAY " MERCH WHERE RDATE IS NOT NULL AND SOLD IS NULL"
             DISPLAY " AND MERCH.ITEMKEY NOT IN (SELECT ITEMKEY"
             DISPLAY " FROM TURNAROUND);"

      *  EXEC SQL CREATE VIEW INVENTORY AS
      *    SELECT MERCH.ITEMKEY AS ITEMKEY, ORDERED,
      *    MWAIT, DWAIT FROM MERCH, TURNAROUND COR1 WHERE RDATE
      *    IS NOT NULL AND SOLD IS NULL AND
      *    MERCH.ITEMKEY = COR1.ITEMKEY
      *    UNION
      *    SELECT ITEMKEY, ORDERED,
      *    CAST (NULL AS INTERVAL MONTH),
      *    CAST (NULL AS INTERVAL DAY TO HOUR) FROM
      *    MERCH WHERE RDATE IS NOT NULL AND SOLD IS NULL
      *    AND MERCH.ITEMKEY NOT IN (SELECT ITEMKEY
      *    FROM TURNAROUND);
             CALL "SUB7" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Something ordered but not received 

             DISPLAY "INSERT INTO MERCH VALUES ("
             DISPLAY " 0, DATE '1993-11-23',"
             DISPLAY " NULL, NULL, NULL);"

      *  EXEC SQL INSERT INTO MERCH VALUES (
      *    0, DATE '1993-11-23',
      *    NULL, NULL, NULL);
             CALL "SUB9" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *Something we don't know what time it arrived 

             MOVE "12:34:56" TO chtime
             DISPLAY "chtime is 12:34:56"
             COMPUTE indic1 = -1
             DISPLAY "indic1 = -1;"
             DISPLAY "INSERT INTO MERCH VALUES ("
             DISPLAY " 1, DATE '1993-12-10',"
             DISPLAY " DATE '1994-01-03',"
             DISPLAY " CAST (:chtime:indic1 AS TIME), NULL);"

      *  EXEC SQL INSERT INTO MERCH VALUES (
      *    1, DATE '1993-12-10',
      *    DATE '1994-01-03',
      *    CAST (:chtime:indic1 AS TIME), NULL);
             CALL "SUB10" USING SQLCODE SQLSTATE chtime indic1
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *Something back-ordered 

             DISPLAY "INSERT INTO MERCH VALUES ("
             DISPLAY " 2, DATE '1993-12-11',"
             DISPLAY " NULL, NULL,"
             DISPLAY " CAST ('TIMESTAMP ''1993-12-11 13:00:00''' AS
      -    " TIMESTAMP));"

      *  EXEC SQL INSERT INTO MERCH VALUES (
      *    2, DATE '1993-12-11',
      *    NULL, NULL,
      *    CAST ('TIMESTAMP ''1993-12-11 13:00:00''' AS TIMESTAMP))
      * ;
             CALL "SUB11" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO MERCH VALUES ("
             DISPLAY " 4, DATE '1993-01-26', DATE '1993-01-27',"
             DISPLAY " NULL, NULL);"

      *  EXEC SQL INSERT INTO MERCH VALUES (
      *    4, DATE '1993-01-26', DATE '1993-01-27',
      *    NULL, NULL);
             CALL "SUB12" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO TURNAROUND VALUES ("
             DISPLAY " 2, INTERVAL '1' MONTH, INTERVAL '20:0' DAY TO
      -    " HOUR);"

      *  EXEC SQL INSERT INTO TURNAROUND VALUES (
      *    2, INTERVAL '1' MONTH, INTERVAL '20:0' DAY TO HOUR)
      * ;
             CALL "SUB13" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *We have only a vague idea of the turnaround for this thing 

             DISPLAY "chtime is 20:0"
             MOVE "20:0 " TO chtime
             DISPLAY "indic1 = -1;"
             COMPUTE indic1 = -1

             DISPLAY "INSERT INTO TURNAROUND VALUES ("
             DISPLAY " 5, INTERVAL '5' MONTH,"
             DISPLAY " CAST (:chtime:indic1 AS INTERVAL DAY TO HOUR));"

      *  EXEC SQL INSERT INTO TURNAROUND VALUES (
      *    5, INTERVAL '5' MONTH,
      *    CAST (:chtime:indic1 AS INTERVAL DAY TO HOUR));
             CALL "SUB14" USING SQLCODE SQLSTATE chtime indic1
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO TURNAROUND VALUES ("
             DISPLAY " 6, INTERVAL '2' MONTH, NULL);"

      *  EXEC SQL INSERT INTO TURNAROUND VALUES (
      *    6, INTERVAL '2' MONTH, NULL);
             CALL "SUB15" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "SELECT COUNT(*) INTO :int1 FROM"
             DISPLAY " MERCH A, MERCH B WHERE A.SOLD = B.SOLD;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM
      *    MERCH A, MERCH B WHERE A.SOLD = B.SOLD;
             CALL "SUB16" 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 FROM"
             DISPLAY " MERCH A, MERCH B WHERE A.RTIME = B.RTIME;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM
      *    MERCH A, MERCH B WHERE A.RTIME = B.RTIME;
             CALL "SUB17" 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 "SELECT COUNT(*) INTO :int1 FROM"
             DISPLAY " MERCH WHERE RDATE IS NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM
      *    MERCH WHERE RDATE IS NULL;
             CALL "SUB18" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

             DISPLAY "SELECT COUNT(*) INTO :int1 FROM"
             DISPLAY " TURNAROUND WHERE DWAIT IS NOT NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM
      *    TURNAROUND WHERE DWAIT IS NOT NULL;
             CALL "SUB19" 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 EXTRACT (DAY FROM RDATE) INTO :int1:indic1"
             DISPLAY " FROM MERCH, TURNAROUND WHERE MERCH.ITEMKEY ="
             DISPLAY " TURNAROUND.ITEMKEY;"

             COMPUTE int1 = -1
             MOVE 2 TO indic1
      *  EXEC SQL SELECT EXTRACT (DAY FROM RDATE) INTO :int1:indic1
      *    FROM MERCH, TURNAROUND WHERE MERCH.ITEMKEY =
      *    TURNAROUND.ITEMKEY;
             CALL "SUB20" USING SQLCODE SQLSTATE int1 indic1
             MOVE SQLCODE TO SQL-COD

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

             DISPLAY "DECLARE C11211 CURSOR FOR"
             DISPLAY " SELECT ITEMKEY FROM MERCH WHERE SOLD IS NOT
      -    " NULL;"

      *  EXEC SQL DECLARE C11211 CURSOR FOR
      *    SELECT ITEMKEY FROM MERCH WHERE SOLD IS NOT NULL END-EXEC

             DISPLAY  " "

             DISPLAY "OPEN C11211;"
      *  EXEC SQL OPEN C11211;
             CALL "SUB21" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             DISPLAY "FETCH C11211 INTO :int1;"
      *  EXEC SQL FETCH C11211 INTO :int1;
             CALL "SUB22" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

      *Cursor left open. 

             DISPLAY "DECLARE C11212 CURSOR FOR"
             DISPLAY " SELECT EXTRACT (HOUR FROM AVG (DWAIT))"
             DISPLAY " FROM MERCH, TURNAROUND WHERE"
             DISPLAY " MERCH.ITEMKEY = TURNAROUND.ITEMKEY OR"
             DISPLAY " TURNAROUND.ITEMKEY NOT IN"
             DISPLAY " (SELECT ITEMKEY FROM MERCH);"

      *  EXEC SQL DECLARE C11212 CURSOR FOR
      *    SELECT EXTRACT (HOUR FROM AVG (DWAIT))
      *    FROM MERCH, TURNAROUND WHERE
      *    MERCH.ITEMKEY = TURNAROUND.ITEMKEY OR
      *    TURNAROUND.ITEMKEY NOT IN
      *    (SELECT ITEMKEY FROM MERCH) END-EXEC

             DISPLAY  " "

             DISPLAY "OPEN C11212;"
      *  EXEC SQL OPEN C11212;
             CALL "SUB23" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
             if (SQLCODE  <  0) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "SQLSTATE can be 00000 or 01003; its value is ",
             SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "00000"  AND  SQLSTATE  NOT  =  
             "01003"then
               MOVE 0 TO flag
             END-IF

      *DML083 set the precedent for requiring 01003 on the fetches. 
      *One might argue that it ought to be returned just on the     
      *open and never again.  DML083 is under dispute, so status    
      *codes are checked loosely here.                              

             COMPUTE int1 = -1
             DISPLAY "FETCH C11212 INTO :int1;"
      *  EXEC SQL FETCH C11212 INTO :int1;
             CALL "SUB24" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

             DISPLAY "SQLCODE should be >= 0; its value is ", SQL-COD
             if (SQLCODE  <  0) then
               MOVE 0 TO flag
             END-IF
             DISPLAY "SQLSTATE can be 00000 or 01003; its value is ",
             SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "00000"  AND  SQLSTATE  NOT  =  
             "01003"then
               MOVE 0 TO flag
             END-IF
             DISPLAY "int1 should be 0; its value is ", int1
             if (int1  NOT =  0) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM INVENTORY WHERE MWAIT IS NULL"
             DISPLAY " AND DWAIT IS NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM INVENTORY WHERE MWAIT IS NULL
      *    AND DWAIT IS NULL;
             CALL "SUB25" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB33" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0621 ********************
      ******************** BEGIN TEST0623 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0623 "
             DISPLAY "OUTER JOINs with NULLs and empty tables (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
      -    " 4"
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "CREATE TABLE JNULL1 (C1 INT, C2 INT);"
      *  EXEC SQL CREATE TABLE JNULL1 (C1 INT, C2 INT)
      * ;
             CALL "SUB34" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "CREATE TABLE JNULL2 (D1 INT, D2 INT);"
      *  EXEC SQL CREATE TABLE JNULL2 (D1 INT, D2 INT)
      * ;
             CALL "SUB36" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "CREATE VIEW JNULL3 AS"
             DISPLAY " SELECT C1, D1, D2 FROM JNULL1 LEFT OUTER JOIN
      -    " JNULL2"
             DISPLAY " ON C2 = D2;"

      *  EXEC SQL CREATE VIEW JNULL3 AS
      *    SELECT C1, D1, D2 FROM JNULL1 LEFT OUTER JOIN JNULL2
      *    ON C2 = D2;
             CALL "SUB38" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "CREATE VIEW JNULL4 AS"
             DISPLAY " SELECT D1, D2 AS C2 FROM JNULL2;"

      *  EXEC SQL CREATE VIEW JNULL4 AS
      *    SELECT D1, D2 AS C2 FROM JNULL2;
             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 "CREATE VIEW JNULL5 AS"
             DISPLAY " SELECT C1, D1, C2 FROM JNULL1 RIGHT OUTER JOIN
      -    " JNULL4"
             DISPLAY " USING (C2);"

      *  EXEC SQL CREATE VIEW JNULL5 AS
      *    SELECT C1, D1, C2 FROM JNULL1 RIGHT OUTER JOIN JNULL4
      *    USING (C2);
             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 "CREATE VIEW JNULL6 AS"
             DISPLAY " SELECT * FROM JNULL1 LEFT OUTER JOIN JNULL4"
             DISPLAY " USING (C2);"

      *  EXEC SQL CREATE VIEW JNULL6 AS
      *    SELECT * FROM JNULL1 LEFT OUTER JOIN JNULL4
      *    USING (C2);
             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 "INSERT INTO JNULL1 VALUES (NULL, NULL);"
      *  EXEC SQL INSERT INTO JNULL1 VALUES (NULL, NULL);
             CALL "SUB46" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO JNULL1 VALUES (1, NULL);"
      *  EXEC SQL INSERT INTO JNULL1 VALUES (1, NULL);
             CALL "SUB47" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO JNULL1 VALUES (NULL, 1);"
      *  EXEC SQL INSERT INTO JNULL1 VALUES (NULL, 1);
             CALL "SUB48" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO JNULL1 VALUES (1, 1);"
      *  EXEC SQL INSERT INTO JNULL1 VALUES (1, 1);
             CALL "SUB49" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO JNULL1 VALUES (2, 2);"
      *  EXEC SQL INSERT INTO JNULL1 VALUES (2, 2);
             CALL "SUB50" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM JNULL3;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL3;
             CALL "SUB51" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM JNULL3"
             DISPLAY " WHERE D2 IS NOT NULL OR D1 IS NOT NULL;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL3
      *    WHERE D2 IS NOT NULL OR D1 IS NOT NULL;
             CALL "SUB52" 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 "SELECT COUNT(*) INTO :int1 FROM JNULL5;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL5;
             CALL "SUB53" 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 "SELECT COUNT(*) INTO :int1 FROM"
             DISPLAY " JNULL6"
             DISPLAY " WHERE C2 IS NOT NULL;"

      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM
      *    JNULL6
      *    WHERE C2 IS NOT NULL;
             CALL "SUB54" 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

      *Nonempty table 

             DISPLAY "INSERT INTO JNULL2"
             DISPLAY " SELECT * FROM JNULL1;"

      *  EXEC SQL INSERT INTO JNULL2
      *    SELECT * FROM JNULL1;
             CALL "SUB55" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "UPDATE JNULL2"
             DISPLAY " SET D2 = 1 WHERE D2 = 2;"

      *  EXEC SQL UPDATE JNULL2
      *    SET D2 = 1 WHERE D2 = 2;
             CALL "SUB56" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM JNULL3;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL3;
             CALL "SUB57" 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
             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM JNULL3 WHERE C1 IS NULL;"

      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM JNULL3 WHERE C1 IS NULL;
             CALL "SUB58" 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

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM JNULL3 WHERE D1 IS NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM JNULL3 WHERE D1 IS NULL;
             CALL "SUB59" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM JNULL3 WHERE D2 IS NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM JNULL3 WHERE D2 IS NULL;
             CALL "SUB60" 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 "SELECT AVG(D1) * 10 INTO :int1"
             DISPLAY " FROM JNULL3;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT AVG(D1) * 10 INTO :int1
      *    FROM JNULL3;
             CALL "SUB61" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM JNULL6"
             DISPLAY " WHERE C2 = 1;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM JNULL6
      *    WHERE C2 = 1;
             CALL "SUB62" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM JNULL6"
             DISPLAY " WHERE C2 IS NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM JNULL6
      *    WHERE C2 IS NULL;
             CALL "SUB63" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM JNULL6"
             DISPLAY " WHERE C2 = C1 AND"
             DISPLAY " D1 IS NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM JNULL6
      *    WHERE C2 = C1 AND
      *    D1 IS NULL;
             CALL "SUB64" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD

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

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB72" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0623 ********************
      ******************** BEGIN TEST0625 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0625 "
             DISPLAY " ADD COLUMN and DROP COLUMN (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
      -    " 3"
             DISPLAY " 11.11 "
             DISPLAY " 11.15 "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "CREATE TABLE CHANGG"
             DISPLAY " (NAAM CHAR (14) NOT NULL PRIMARY KEY, AGE INT);"
      *  EXEC SQL CREATE TABLE CHANGG
      *    (NAAM CHAR (14) NOT NULL PRIMARY KEY, AGE INT);
             CALL "SUB73" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

             DISPLAY "CREATE VIEW CHANGGVIEW AS"
             DISPLAY " SELECT * FROM CHANGG;"
      *  EXEC SQL CREATE VIEW CHANGGVIEW AS
      *    SELECT * FROM CHANGG;
             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  " "

      *should not be able to drop CHANGG.NAAM RESTRICT due to 11.15 SR
             DISPLAY "ALTER TABLE CHANGG"
             DISPLAY " DROP NAAM RESTRICT;"
      *  EXEC SQL ALTER TABLE CHANGG
      *    DROP NAAM RESTRICT;
             CALL "SUB77" 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 42000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF

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

             DISPLAY "INSERT INTO CHANGG VALUES ('RALPH',
      -      "22);"
      *  EXEC SQL INSERT INTO CHANGG VALUES ('RALPH', 
      *  22);
             CALL "SUB79" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO CHANGG VALUES ('RUDOLPH',
      -      "54);"
      *  EXEC SQL INSERT INTO CHANGG VALUES ('RUDOLPH', 
      *  54);
             CALL "SUB80" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO CHANGG VALUES ('QUEEG',
      -      "33);"
      *  EXEC SQL INSERT INTO CHANGG VALUES ('QUEEG', 
      *  33);
             CALL "SUB81" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO CHANGG VALUES ('BESSIE',
      -      "106);"
      *  EXEC SQL INSERT INTO CHANGG VALUES ('BESSIE', 
      *  106);
             CALL "SUB82" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *This select should fail 

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM CHANGG WHERE DIVORCES IS NULL;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM CHANGG WHERE DIVORCES IS NULL;
             CALL "SUB83" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '42000'; its value is '",
             SQLSTATE "'"
             if (SQLCODE  NOT <  0) then
               MOVE 0 TO flag
             END-IF
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "ALTER TABLE CHANGG ADD NUMBRR CHAR(11);"
      *  EXEC SQL ALTER TABLE CHANGG ADD NUMBRR CHAR(11)
      * ;
             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  " "

             COMPUTE int1 = -1
             DISPLAY "SELECT MAX(AGE) INTO :int1 FROM CHANGGVIEW;"
      *  EXEC SQL SELECT MAX(AGE) INTO :int1 FROM CHANGGVIEW
      * ;
             CALL "SUB87" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 106; its value is ", int1
             if (int1  NOT =  106) then
               MOVE 0 TO flag
             END-IF

      *11.11 GR.2:  This statement should fail. 

             DISPLAY "SELECT NUMBRR INTO :ch1 FROM CHANGGVIEW;"
      *  EXEC SQL SELECT NUMBRR INTO :ch1 FROM CHANGGVIEW;
             CALL "SUB88" USING SQLCODE SQLSTATE ch1
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '42000'; its value is '",
             SQLSTATE "'"
             if (SQLCODE  NOT <  0) then
               MOVE 0 TO flag
             END-IF
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF

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

             DISPLAY "DROP VIEW CHANGGVIEW CASCADE;"
      *  EXEC SQL DROP VIEW CHANGGVIEW CASCADE;
             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  " "

      *Optional keyword! 

             DISPLAY "ALTER TABLE CHANGG"
             DISPLAY " ADD COLUMN DIVORCES INT DEFAULT 0;"
      *  EXEC SQL ALTER TABLE CHANGG
      *    ADD COLUMN DIVORCES INT DEFAULT 0;
             CALL "SUB92" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Check that defaults are correct 

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM CHANGG WHERE NUMBRR IS NOT NULL"
             DISPLAY " OR DIVORCES <> 0;"
             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM CHANGG WHERE NUMBRR IS NOT NULL
      *    OR DIVORCES <> 0;
             CALL "SUB94" 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

      *Do some uncomplicated things 

             DISPLAY "UPDATE CHANGG"
             DISPLAY " SET NUMBRR = '837-47-1847', DIVORCES = 3"
             DISPLAY " WHERE NAAM = 'RUDOLPH';"
      *  EXEC SQL UPDATE CHANGG
      *    SET NUMBRR = '837-47-1847', DIVORCES = 3
      *    WHERE NAAM = 'RUDOLPH';
             CALL "SUB95" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "UPDATE CHANGG"
             DISPLAY " SET NUMBRR = '738-47-1847', DIVORCES = NULL"
             DISPLAY " WHERE NAAM = 'QUEEG';"
      *  EXEC SQL UPDATE CHANGG
      *    SET NUMBRR = '738-47-1847', DIVORCES = NULL
      *    WHERE NAAM = 'QUEEG';
             CALL "SUB96" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DELETE FROM CHANGG"
             DISPLAY " WHERE NUMBRR IS NULL;"
      *  EXEC SQL DELETE FROM CHANGG
      *    WHERE NUMBRR IS NULL;
             CALL "SUB97" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO CHANGG (NAAM, AGE, NUMBRR)"
             DISPLAY " VALUES ('GOOBER', 16, '000-10-0001');"
      *  EXEC SQL INSERT INTO CHANGG (NAAM, AGE, NUMBRR)
      *    VALUES ('GOOBER', 16, '000-10-0001');
             CALL "SUB98" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO CHANGG"
             DISPLAY " VALUES ('OLIVIA', 20, '111-11-1111', 0);"
      *  EXEC SQL INSERT INTO CHANGG
      *    VALUES ('OLIVIA', 20, '111-11-1111', 0);
             CALL "SUB99" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE "xxxxxxxxxxx" TO ch1
             DISPLAY "SELECT AGE, NUMBRR, DIVORCES"
             DISPLAY " INTO :int1, :ch1, :int2"
             DISPLAY " FROM CHANGG"
             DISPLAY " WHERE NAAM = 'RUDOLPH';"
      *  EXEC SQL SELECT AGE, NUMBRR, DIVORCES
      *    INTO :int1, :ch1, :int2
      *    FROM CHANGG
      *    WHERE NAAM = 'RUDOLPH';
             CALL "SUB100" USING SQLCODE SQLSTATE int1 ch1 int2
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 54; its value is ", int1
             DISPLAY "int2 should be 3; its value is ", int2
             DISPLAY "ch1 should be '837-47-1847'; its value is '"
             ch1 "'"
             if (int1  NOT =  54  OR  int2  NOT =  3) then
               MOVE 0 TO flag
             END-IF
             if (ch1  NOT  =   "837-47-1847"then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE 10 TO indic1
             MOVE "xxxxxxxxxxx" TO ch1
             DISPLAY "SELECT AGE, NUMBRR, DIVORCES"
             DISPLAY " INTO :int1, :ch1, :int2:indic1"
             DISPLAY " FROM CHANGG"
             DISPLAY " WHERE NAAM = 'QUEEG';"
      *  EXEC SQL SELECT AGE, NUMBRR, DIVORCES
      *    INTO :int1, :ch1, :int2:indic1
      *    FROM CHANGG
      *    WHERE NAAM = 'QUEEG';
             CALL "SUB101" USING SQLCODE SQLSTATE int1 ch1 int2 indic1
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 33; its value is ", int1
             DISPLAY "indic1 should be -1; its value is ", indic1
             DISPLAY "ch1 should be '738-47-1847'; its value is '"
             ch1 "'"
             if (int1  NOT =  33  OR  indic1  NOT =  -1) then
               MOVE 0 TO flag
             END-IF
             if (ch1  NOT  =   "738-47-1847"then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE "xxxxxxxxxxx" TO ch1
             DISPLAY "SELECT AGE, NUMBRR, DIVORCES"
             DISPLAY " INTO :int1, :ch1, :int2"
             DISPLAY " FROM CHANGG"
             DISPLAY " WHERE NAAM = 'GOOBER';"
      *  EXEC SQL SELECT AGE, NUMBRR, DIVORCES
      *    INTO :int1, :ch1, :int2
      *    FROM CHANGG
      *    WHERE NAAM = 'GOOBER';
             CALL "SUB102" USING SQLCODE SQLSTATE int1 ch1 int2
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 16; its value is ", int1
             DISPLAY "int2 should be 0; its value is ", int2
             DISPLAY "ch1 should be '000-10-0001'; its value is '"
             ch1 "'"
             if (int1  NOT =  16  OR  int2  NOT =  0) then
               MOVE 0 TO flag
             END-IF
             if (ch1  NOT  =   "000-10-0001"then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE "xxxxxxxxxxx" TO ch1
             DISPLAY "SELECT AGE, NUMBRR, DIVORCES"
             DISPLAY " INTO :int1, :ch1, :int2"
             DISPLAY " FROM CHANGG"
             DISPLAY " WHERE NAAM = 'OLIVIA';"
      *  EXEC SQL SELECT AGE, NUMBRR, DIVORCES
      *    INTO :int1, :ch1, :int2
      *    FROM CHANGG
      *    WHERE NAAM = 'OLIVIA';
             CALL "SUB103" USING SQLCODE SQLSTATE int1 ch1 int2
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY "int1 should be 20; its value is ", int1
             DISPLAY "int2 should be 0; its value is ", int2
             DISPLAY "ch1 should be '111-11-1111'; its value is '"
             ch1 "'"
             if (int1  NOT =  20  OR  int2  NOT =  0) then
               MOVE 0 TO flag
             END-IF
             if (ch1  NOT  =   "111-11-1111"then
               MOVE 0 TO flag
             END-IF

             COMPUTE int1 = -1
             DISPLAY "SELECT COUNT(*) INTO :int1 FROM CHANGG;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1 FROM CHANGG;
             CALL "SUB104" 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

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Age is nobody's business! 

             DISPLAY "ALTER TABLE CHANGG DROP AGE CASCADE;"
      *  EXEC SQL ALTER TABLE CHANGG DROP AGE CASCADE
      * ;
             CALL "SUB106" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Optional keyword! 

             DISPLAY "ALTER TABLE CHANGG DROP COLUMN DIVORCES RESTRICT;"
      *  EXEC SQL ALTER TABLE CHANGG DROP COLUMN DIVORCES
      *  RESTRICT;
             CALL "SUB108" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *This select should fail 

             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM CHANGG WHERE AGE > 30;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM CHANGG WHERE AGE > 30;
             CALL "SUB110" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '42000'; its value is '",
             SQLSTATE "'"
             if (SQLCODE  NOT <  0) then
               MOVE 0 TO flag
             END-IF
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF

      *This select should fail too 

             MOVE "xxxxx" TO SQLSTATE
             DISPLAY "SELECT COUNT(*) INTO :int1"
             DISPLAY " FROM CHANGG WHERE DIVORCES IS NULL;"
      *  EXEC SQL SELECT COUNT(*) INTO :int1
      *    FROM CHANGG WHERE DIVORCES IS NULL;
             CALL "SUB111" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be '42000'; its value is '",
             SQLSTATE "'"
             if (SQLCODE  NOT <  0) then
               MOVE 0 TO flag
             END-IF
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF

             MOVE "xxxxxxxxxxxxxx" TO ch2
             DISPLAY "SELECT NAAM INTO :ch2"
             DISPLAY " FROM CHANGG"
             DISPLAY " WHERE NUMBRR LIKE '%000%';"
      *  EXEC SQL SELECT NAAM INTO :ch2
      *    FROM CHANGG
      *    WHERE NUMBRR LIKE '%000%';
             CALL "SUB112" USING SQLCODE SQLSTATE ch2
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch2 should be 'GOOBER '; its value is '",
             ch2 "'"
             if (ch2  NOT  =   "GOOBER "then
               MOVE 0 TO flag
             END-IF

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

           PERFORM CHCKOK
             DISPLAY  " "

      *create a referential constraint on table CHANGG 

             DISPLAY "CREATE TABLE REFERENCE_CHANGG ("
             DISPLAY " NAAM CHAR (14) NOT NULL PRIMARY KEY"
             DISPLAY " REFERENCES CHANGG);"
      *  EXEC SQL CREATE TABLE REFERENCE_CHANGG (
      *    NAAM CHAR (14) NOT NULL PRIMARY KEY
      *    REFERENCES CHANGG);
             CALL "SUB114" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

      *verify referential constraint 
             DISPLAY "INSERT INTO REFERENCE_CHANGG VALUES
      -       "('NO SUCH NAAM');"
      *  EXEC SQL INSERT INTO REFERENCE_CHANGG VALUES 
      *  ('NO SUCH NAAM');
             CALL "SUB116" 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 23000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "23000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "23000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF

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

      *should not be able to drop CHANGG.NAAM RESTRICT due to RI const
             DISPLAY "ALTER TABLE CHANGG"
             DISPLAY " DROP NAAM RESTRICT;"
      *  EXEC SQL ALTER TABLE CHANGG
      *    DROP NAAM RESTRICT;
             CALL "SUB118" 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 42000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF

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

             DISPLAY  " "

      *should be able to drop CHANGG.NAAM CASCADE 
             DISPLAY "ALTER TABLE CHANGG"
             DISPLAY " DROP NAAM CASCADE;"
      *  EXEC SQL ALTER TABLE CHANGG
      *    DROP NAAM CASCADE;
             CALL "SUB120" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *verify referential constraint was a dropped object 
             DISPLAY "INSERT INTO REFERENCE_CHANGG VALUES
      -    "('NO SUCH NAAM');"
      *  EXEC SQL INSERT INTO REFERENCE_CHANGG VALUES 
      *  ('NO SUCH NAAM');
             CALL "SUB122" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *TEd Hook #1  Check 11.15 SR.3 (can't drop all the columns) 
      *This is a syntax error.  If it is rejected at compile time,  
      *save the error and use the TEd hooks to remove this subtest. 
             DISPLAY "ALTER TABLE CHANGG"
             DISPLAY " DROP NUMBRR RESTRICT;"
      *  EXEC SQL ALTER TABLE CHANGG
      *    DROP NUMBRR RESTRICT;
             CALL "SUB124" 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 42000; its value is ", SQLSTATE
           PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
             if (NORMSQ  NOT  =   "42000"then
               MOVE 0 TO flag
             END-IF
             if (NORMSQ   =   "42000"  AND  NORMSQ  NOT  =   SQLSTATE)
             then
               DISPLAY "Valid implementation-defined SQLSTATE accepted."
             END-IF

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

      *TEd Hook #2 

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

           PERFORM CHCKOK
             DISPLAY  " "

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

      *11.18 SR.4 -- only the constraint, not the referencing 
      *table, was dropped. 

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

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB132" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0625 ********************
      ******************** BEGIN TEST0631 *******************
             MOVE 1 TO flag

             DISPLAY " TEST0631 "
             DISPLAY " Datetimes in a (static)"
             DISPLAY "References:"
             DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
      -    " 5"
             DISPLAY " 11.5 "
             DISPLAY " 6.8 "
             DISPLAY " 5.3 "
             DISPLAY " - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "CREATE TABLE OBITUARIES ("
             DISPLAY " NAAM CHAR (14) NOT NULL PRIMARY KEY,"
             DISPLAY " BORN DATE DEFAULT DATE '1880-01-01',"
             DISPLAY " DIED DATE DEFAULT CURRENT_DATE,"
             DISPLAY " ENTERED TIMESTAMP DEFAULT CURRENT_TIMESTAMP);"

      *  EXEC SQL CREATE TABLE OBITUARIES (
      *    NAAM CHAR (14) NOT NULL PRIMARY KEY,
      *    BORN DATE DEFAULT DATE '1880-01-01',
      *    DIED DATE DEFAULT CURRENT_DATE,
      *    ENTERED TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
      *    TESTING1 DATE,
      *    TESTING2 TIMESTAMP);
             CALL "SUB133" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "CREATE TABLE BIRTHS ("
             DISPLAY " NAAM CHAR (14) NOT NULL PRIMARY KEY,"
             DISPLAY " CHECKIN TIME (0)"
             DISPLAY " DEFAULT TIME '00:00:00',"
             DISPLAY " LABOR INTERVAL HOUR"
             DISPLAY " DEFAULT INTERVAL '4' HOUR,"
             DISPLAY " CHECKOUT TIME"
             DISPLAY " DEFAULT CURRENT_TIME);"

      *  EXEC SQL CREATE TABLE BIRTHS (
      *    NAAM CHAR (14) NOT NULL PRIMARY KEY,
      *    CHECKIN TIME (0)
      *    DEFAULT TIME '00:00:00',
      *    LABOR INTERVAL HOUR
      *    DEFAULT INTERVAL '4' HOUR,
      *    CHECKOUT TIME
      *    DEFAULT CURRENT_TIME,
      *    TESTING TIME);
             CALL "SUB135" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

      *The <default option> must be a <literal> or a <datetime value  
      *function> so I can't use a CAST to change CURRENT_TIME to have 
      *no fractional seconds.                                         

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO OBITUARIES (NAAM, TESTING1, TESTING2)"
             DISPLAY " VALUES ('KEITH', CURRENT_DATE,
      -    " CURRENT_TIMESTAMP);"
      *  EXEC SQL INSERT INTO OBITUARIES (NAAM, TESTING1, TESTING2)
      *    VALUES ('KEITH', CURRENT_DATE, CURRENT_TIMESTAMP)
      * ;
             CALL "SUB137" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "INSERT INTO BIRTHS (NAAM, TESTING)"
             DISPLAY " VALUES ('BJORN', CURRENT_TIME);"
      *  EXEC SQL INSERT INTO BIRTHS (NAAM, TESTING)
      *    VALUES ('BJORN', CURRENT_TIME);
             CALL "SUB138" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "SELECT EXTRACT (HOUR FROM CHECKIN) +"
             DISPLAY " EXTRACT (MINUTE FROM CHECKIN) +"
             DISPLAY " EXTRACT (SECOND FROM CHECKIN)"
             DISPLAY " INTO :int1 FROM BIRTHS;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT EXTRACT (HOUR FROM CHECKIN) +
      *    EXTRACT (MINUTE FROM CHECKIN) +
      *    EXTRACT (SECOND FROM CHECKIN)
      *    INTO :int1 FROM BIRTHS;
             CALL "SUB139" 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 "SELECT EXTRACT (HOUR FROM LABOR) INTO :int1 FROM
      -    " BIRTHS;"
             COMPUTE int1 = -1
      *  EXEC SQL SELECT EXTRACT (HOUR FROM LABOR) INTO :int1 FROM
      *  BIRTHS;
             CALL "SUB140" 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

             DISPLAY "SELECT COUNT (*) INTO :int1 FROM BIRTHS"
             DISPLAY " WHERE TESTING <> CHECKOUT OR CHECKOUT IS NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT (*) INTO :int1 FROM BIRTHS
      *    WHERE TESTING <> CHECKOUT OR CHECKOUT IS NULL;
             CALL "SUB141" 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 "SELECT COUNT (*) INTO :int1 FROM OBITUARIES"
             DISPLAY " WHERE BORN <> DATE '1880-01-01'"
             DISPLAY " OR BORN IS NULL"
             DISPLAY " OR DIED <> TESTING1"
             DISPLAY " OR DIED IS NULL"
             DISPLAY " OR ENTERED <> TESTING2"
             DISPLAY " OR ENTERED IS NULL;"

             COMPUTE int1 = -1
      *  EXEC SQL SELECT COUNT (*) INTO :int1 FROM OBITUARIES
      *    WHERE BORN <> DATE '1880-01-01'
      *    OR BORN IS NULL
      *    OR DIED <> TESTING1
      *    OR DIED IS NULL
      *    OR ENTERED <> TESTING2
      *    OR ENTERED IS NULL;
             CALL "SUB142" USING SQLCODE SQLSTATE int1
--> --------------------

--> maximum size reached

--> --------------------

¤ Dauer der Verarbeitung: 0.86 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