Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/COBOL/Test-Suite/SQL M/     Datei vom 4.1.2008 mit Größe 133 kB image not shown  

Quelle  dml113.cob

  Sprache: Cobol
 

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


      * Standard COBOL (file "DML113.SCO") calling SQL
      * procedures in file "DML113.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.
      *                                                              
      * DML113.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 dynamic version of DML112.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  ind1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
       01  chtime PIC  X(8).
       01  ch1 PIC  X(11).
       01  ch2 PIC  X(14).
       01  ch3 PIC  X(14).
       01  dstmt PIC  X(50).
       01  longst PIC  X(240).
      *  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, dml113.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 TEST0622 *******************
             MOVE 1 TO flag

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

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB3" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE TABLE MERCH ('  ||
      *    '  ITEMKEY INT,'        ||
      *    '  ORDERED DATE,'       ||
      *    '  RDATE DATE,'         ||
      *    '  RTIME TIME,'         ||
      *    '  SOLD TIMESTAMP)'
      *    );
             CALL "SUB4" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB5" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB7" USING SQLCODE SQLSTATE longst
             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  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB9" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE TABLE TURNAROUND ('     ||
      *    '  ITEMKEY INT,'                ||
      *    '  MWAIT INTERVAL MONTH,'       ||
      *    '  DWAIT INTERVAL DAY TO HOUR)'
      *    );
             CALL "SUB10" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB11" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB13" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB14" 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)       

      *Statement too long for CONCATBUF; break into two views. 
      *Even now, this statement has whitespace removed to make it fit 

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB15" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE VIEW NULLINV AS'                               
      *  ||
      *    ' SELECT ITEMKEY,ORDERED,CAST'                         
      *  ||
      *    ' (NULL AS INTERVAL MONTH) AS MWAIT,CAST'              
      *  ||
      *    ' (NULL AS INTERVAL DAY TO HOUR) AS DWAIT FROM'        
      *  ||
      *    ' MERCH WHERE RDATE IS NOT NULL AND SOLD IS NULL'      
      *  ||
      *    ' AND MERCH.ITEMKEY NOT IN(SELECT ITEMKEY'             
      *  ||
      *    ' FROM TURNAROUND)'
      *    );
             CALL "SUB16" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB17" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB19" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB21" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    '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 * FROM NULLINV'
      *    );
             CALL "SUB22" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB23" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB25" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Something ordered but not received 

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB27" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO MERCH VALUES (' ||
      *    '  0, DATE ''1993-11-23'','  ||
      *    '  NULL, NULL, NULL)'
      *    );
             CALL "SUB28" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB29" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB30" USING SQLCODE SQLSTATE longst
             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 ind1 = -1
             DISPLAY "ind1 = -1;"

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB31" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO MERCH VALUES (' ||
      *    '  1, DATE ''1993-12-10'','  ||
      *    '  DATE ''1994-01-03'','     ||
      *    '  CAST (? AS TIME), NULL)'
      *    );
             CALL "SUB32" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB33" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11311 FROM :longst;"
      *  EXEC SQL PREPARE S11311 FROM :longst;
             CALL "SUB34" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE S11311 USING :chtime:ind1;"
      *  EXEC SQL EXECUTE S11311 USING :chtime:ind1;
             CALL "SUB35" USING SQLCODE SQLSTATE chtime ind1
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *Something back-ordered 

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB36" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO MERCH VALUES (' ||
      *    '  2, DATE ''1993-12-11'','  ||
      *    '  NULL, NULL,'              ||
      *    '  CAST (''TIMESTAMP ''''1993-12-11 13:00:00'''''' AS
      *  TIMESTAMP))'
      *    );
             CALL "SUB37" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB38" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB39" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB40" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO MERCH VALUES ('                     ||
      *    '  4, DATE ''1993-01-26'', DATE ''1993-01-27'',' ||
      *    '  NULL, NULL)'
      *    );
             CALL "SUB41" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB42" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB43" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB44" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO TURNAROUND VALUES ('  ||
      *    '  2, INTERVAL ''1'' MONTH,'       ||
      *    '  INTERVAL ''20:0'' DAY TO HOUR)'
      *    );
             CALL "SUB45" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB46" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB47" USING SQLCODE SQLSTATE longst
             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 "ind1 = -1;"
             COMPUTE ind1 = -1

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB48" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO TURNAROUND VALUES ('     ||
      *    '  5, INTERVAL ''5'' MONTH,'          ||
      *    '  CAST (? AS INTERVAL DAY TO HOUR))'
      *    );
             CALL "SUB49" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB50" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11312 FROM :longst;"
      *  EXEC SQL PREPARE S11312 FROM :longst;
             CALL "SUB51" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE S11312 USING :chtime:ind1;"
      *  EXEC SQL EXECUTE S11312 USING :chtime:ind1;
             CALL "SUB52" USING SQLCODE SQLSTATE chtime ind1
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB53" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO TURNAROUND VALUES' ||
      *    '  (6, INTERVAL ''2'' MONTH, NULL)'
      *    );
             CALL "SUB54" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB55" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB56" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB57" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*) FROM' ||
      *    '  MERCH A, MERCH B WHERE A.SOLD = B.SOLD'
      *    );
             CALL "SUB58" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB59" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11313 FROM :longst;"
      *  EXEC SQL PREPARE S11313 FROM :longst;
             CALL "SUB60" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11313 CURSOR FOR S11313;"
      *  EXEC SQL DECLARE C11313 CURSOR FOR S11313 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11313 INTO :int1;"
      *  EXEC SQL FETCH C11313 INTO :int1;
             CALL "SUB62" 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 "CLOSE C11313;"
      *  EXEC SQL CLOSE C11313;
             CALL "SUB63" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB64" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*) FROM' ||
      *    '  MERCH A, MERCH B WHERE A.RTIME = B.RTIME'
      *    );
             CALL "SUB65" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB66" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11314 FROM :longst;"
      *  EXEC SQL PREPARE S11314 FROM :longst;
             CALL "SUB67" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11314 CURSOR FOR S11314;"
      *  EXEC SQL DECLARE C11314 CURSOR FOR S11314 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11314 INTO :int1;"
      *  EXEC SQL FETCH C11314 INTO :int1;
             CALL "SUB69" 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 "CLOSE C11314;"
      *  EXEC SQL CLOSE C11314;
             CALL "SUB70" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT COUNT(*) FROM MERCH WHERE RDATE IS
      -    " NULL"""
             MOVE "SELECT COUNT(*) FROM MERCH WHERE RDATE IS
      -    " NULL    " TO dstmt

             DISPLAY "PREPARE S11315 FROM :dstmt;"
      *  EXEC SQL PREPARE S11315 FROM :dstmt;
             CALL "SUB71" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11315 CURSOR FOR S11315;"
      *  EXEC SQL DECLARE C11315 CURSOR FOR S11315 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11315 INTO :int1;"
      *  EXEC SQL FETCH C11315 INTO :int1;
             CALL "SUB73" 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 "CLOSE C11315;"
      *  EXEC SQL CLOSE C11315;
             CALL "SUB74" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB75" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*) FROM TURNAROUND' ||
      *    '  WHERE DWAIT IS NOT NULL'
      *    );
             CALL "SUB76" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB77" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11316 FROM :longst;"
      *  EXEC SQL PREPARE S11316 FROM :longst;
             CALL "SUB78" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11316 CURSOR FOR S11316;"
      *  EXEC SQL DECLARE C11316 CURSOR FOR S11316 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11316 INTO :int1;"
      *  EXEC SQL FETCH C11316 INTO :int1;
             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 "CLOSE C11316;"
      *  EXEC SQL CLOSE C11316;
             CALL "SUB81" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB82" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT EXTRACT (DAY FROM RDATE)'                ||
      *    '  FROM MERCH, TURNAROUND WHERE MERCH.ITEMKEY =' ||
      *    '  TURNAROUND.ITEMKEY'
      *    );
             CALL "SUB83" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB84" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11317 FROM :longst;"
      *  EXEC SQL PREPARE S11317 FROM :longst;
             CALL "SUB85" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11317 CURSOR FOR S11317;"
      *  EXEC SQL DECLARE C11317 CURSOR FOR S11317 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             MOVE 2 TO ind1
             DISPLAY "FETCH C11317 INTO :int1:ind1;"
      *  EXEC SQL FETCH C11317 INTO :int1:ind1;
             CALL "SUB87" USING SQLCODE SQLSTATE int1 ind1
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ind1 should be -1; its value is ", ind1
             if (ind1  NOT =  -1) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "CLOSE C11317;"
      *  EXEC SQL CLOSE C11317;
             CALL "SUB88" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT ITEMKEY FROM MERCH WHERE SOLD IS
      -    " NOT NULL"""
             MOVE "SELECT ITEMKEY FROM MERCH WHERE SOLD IS NOT NULL  "
             TO dstmt

             DISPLAY "PREPARE S11318 FROM :dstmt;"
      *  EXEC SQL PREPARE S11318 FROM :dstmt;
             CALL "SUB89" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11318 CURSOR FOR S11318;"
      *  EXEC SQL DECLARE C11318 CURSOR FOR S11318 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11318 INTO :int1;"
      *  EXEC SQL FETCH C11318 INTO :int1;
             CALL "SUB91" 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. 

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB92" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT EXTRACT (HOUR FROM AVG (DWAIT))'  ||
      *    '  FROM MERCH, TURNAROUND WHERE'          ||
      *    '  MERCH.ITEMKEY = TURNAROUND.ITEMKEY OR' ||
      *    '  TURNAROUND.ITEMKEY NOT IN'             ||
      *    '  (SELECT ITEMKEY FROM MERCH)'
      *    );
             CALL "SUB93" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB94" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11319 FROM :longst;"
      *  EXEC SQL PREPARE S11319 FROM :longst;
             CALL "SUB95" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11319 CURSOR FOR S11319;"
      *  EXEC SQL DECLARE C11319 CURSOR FOR S11319 END-EXEC
             DISPLAY  " "

             DISPLAY "OPEN C11319;"
      *  EXEC SQL OPEN C11319;
             CALL "SUB96" 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

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

      *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.                              

             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

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB98" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*)'                      ||
      *    '  FROM INVENTORY WHERE MWAIT IS NULL' ||
      *    '  AND DWAIT IS NULL'
      *    );
             CALL "SUB99" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB100" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S1131A FROM :longst;"
      *  EXEC SQL PREPARE S1131A FROM :longst;
             CALL "SUB101" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C1131A CURSOR FOR S1131A;"
      *  EXEC SQL DECLARE C1131A CURSOR FOR S1131A END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C1131A INTO :int1;"
      *  EXEC SQL FETCH C1131A INTO :int1;
             CALL "SUB103" 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 "SUB104" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""DROP TABLE MERCH CASCADE"""
             MOVE "DROP TABLE MERCH CASCADE                          "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB105" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""DROP TABLE TURNAROUND CASCADE"""
             MOVE "DROP TABLE TURNAROUND CASCADE                     "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB107" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB111" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0622 ********************
      ******************** BEGIN TEST0624 *******************
             MOVE 1 TO flag

             DISPLAY "                  TEST0624 "
             DISPLAY "OUTER JOINs with NULLs and empty tables (dynamic)"
             DISPLAY "References:"
             DISPLAY "    FIPS PUB 127-2 14.1 Transitional SQL features
      -    " 1,4"
             DISPLAY "   - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

             DISPLAY "dstmt=""CREATE TABLE JNULL1 (C1 INT, C2 INT)"""
             MOVE "CREATE TABLE JNULL1 (C1 INT, C2 INT)              "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB112" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""CREATE TABLE JNULL2 (D1 INT, D2 INT)"""
             MOVE "CREATE TABLE JNULL2 (D1 INT, D2 INT)              "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB114" USING SQLCODE SQLSTATE dstmt
             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  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB116" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE VIEW JNULL3 AS'  ||
      *    '  SELECT C1, D1, D2 FROM JNULL1 LEFT OUTER JOIN JNULL2'
      *  ||
      *    '  ON C2 = D2'
      *    );
             CALL "SUB117" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB118" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB120" USING SQLCODE SQLSTATE longst
             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  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB122" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE VIEW JNULL4 AS' ||
      *    '  SELECT D1, D2 AS C2 FROM JNULL2'
      *    );
             CALL "SUB123" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB124" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB126" USING SQLCODE SQLSTATE longst
             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  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB128" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE VIEW JNULL5 AS' ||
      *    '  SELECT C1, D1, C2 FROM JNULL1 RIGHT OUTER JOIN JNULL4'
      *  ||
      *    '  USING (C2)'
      *    );
             CALL "SUB129" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB130" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB132" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB134" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE VIEW JNULL6 AS' ||
      *    '  SELECT * FROM JNULL1 LEFT OUTER JOIN JNULL4' ||
      *    '  USING (C2)'
      *    );
             CALL "SUB135" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB136" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB138" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO JNULL1 VALUES (NULL, NULL)"""
             MOVE "INSERT INTO JNULL1 VALUES (NULL, NULL)            "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB140" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO JNULL1 VALUES (1, NULL)"""
             MOVE "INSERT INTO JNULL1 VALUES (1, NULL)               "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB141" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO JNULL1 VALUES (NULL, 1)"""
             MOVE "INSERT INTO JNULL1 VALUES (NULL, 1)               "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB142" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO JNULL1 VALUES (1, 1)"""
             MOVE "INSERT INTO JNULL1 VALUES (1, 1)                  "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB143" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO JNULL1 VALUES (2, 2)"""
             MOVE "INSERT INTO JNULL1 VALUES (2, 2)                  "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB144" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT COUNT(*) FROM JNULL3"""
             MOVE "SELECT COUNT(*) FROM JNULL3               
      -    "        " TO dstmt

             DISPLAY "PREPARE S11321 FROM :dstmt;"
      *  EXEC SQL PREPARE S11321 FROM :dstmt;
             CALL "SUB145" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11321 CURSOR FOR S11321;"
      *  EXEC SQL DECLARE C11321 CURSOR FOR S11321 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11321 INTO :int1;"
      *  EXEC SQL FETCH C11321 INTO :int1;
             CALL "SUB147" 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 "CLOSE C11321;"
      *  EXEC SQL CLOSE C11321;
             CALL "SUB148" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB149" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*) FROM JNULL3' ||
      *    '  WHERE D2 IS NOT NULL OR D1 IS NOT NULL'
      *    );
             CALL "SUB150" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB151" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11322 FROM :longst;"
      *  EXEC SQL PREPARE S11322 FROM :longst;
             CALL "SUB152" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11322 CURSOR FOR S11322;"
      *  EXEC SQL DECLARE C11322 CURSOR FOR S11322 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11322 INTO :int1;"
      *  EXEC SQL FETCH C11322 INTO :int1;
             CALL "SUB154" 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 "CLOSE C11322;"
      *  EXEC SQL CLOSE C11322;
             CALL "SUB155" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB156" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*) FROM' ||
      *    '  JNULL5'
      *    );
             CALL "SUB157" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB158" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11323 FROM :longst;"
      *  EXEC SQL PREPARE S11323 FROM :longst;
             CALL "SUB159" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11323 CURSOR FOR S11323;"
      *  EXEC SQL DECLARE C11323 CURSOR FOR S11323 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11323 INTO :int1;"
      *  EXEC SQL FETCH C11323 INTO :int1;
             CALL "SUB161" 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 "CLOSE C11323;"
      *  EXEC SQL CLOSE C11323;
             CALL "SUB162" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB163" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*) FROM' ||
      *    '  JNULL6' ||
      *    '   WHERE C2 IS NOT NULL'
      *    );
             CALL "SUB164" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB165" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11324 FROM :longst;"
      *  EXEC SQL PREPARE S11324 FROM :longst;
             CALL "SUB166" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11324 CURSOR FOR S11324;"
      *  EXEC SQL DECLARE C11324 CURSOR FOR S11324 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11324 INTO :int1;"
      *  EXEC SQL FETCH C11324 INTO :int1;
             CALL "SUB168" 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 "CLOSE C11324;"
      *  EXEC SQL CLOSE C11324;
             CALL "SUB169" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *Nonempty table 

             DISPLAY "dstmt=""INSERT INTO JNULL2 SELECT * FROM JNULL1"""
             MOVE "INSERT INTO JNULL2 SELECT * FROM JNULL1   
      -    "        " TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB170" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""UPDATE JNULL2 SET D2 = 1 WHERE D2 = 2"""
             MOVE "UPDATE JNULL2 SET D2 = 1 WHERE D2 = 2             "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB171" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11321 INTO :int1;"
      *  EXEC SQL FETCH C11321 INTO :int1;
             CALL "SUB173" 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

             DISPLAY "CLOSE C11321;"
      *  EXEC SQL CLOSE C11321;
             CALL "SUB174" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT COUNT(*) FROM JNULL3 WHERE C1 IS
      -    " NULL"""
             MOVE "SELECT COUNT(*) FROM JNULL3 WHERE C1 IS
      -    " NULL      " TO dstmt

             DISPLAY "PREPARE S11325 FROM :dstmt;"
      *  EXEC SQL PREPARE S11325 FROM :dstmt;
             CALL "SUB175" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11325 CURSOR FOR S11325;"
      *  EXEC SQL DECLARE C11325 CURSOR FOR S11325 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11325 INTO :int1;"
      *  EXEC SQL FETCH C11325 INTO :int1;
             CALL "SUB177" 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 "CLOSE C11325;"
      *  EXEC SQL CLOSE C11325;
             CALL "SUB178" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT COUNT(*) FROM JNULL3 WHERE D1 IS
      -    " NULL"""
             MOVE "SELECT COUNT(*) FROM JNULL3 WHERE D1 IS
      -    " NULL      " TO dstmt

             DISPLAY "PREPARE S11326 FROM :dstmt;"
      *  EXEC SQL PREPARE S11326 FROM :dstmt;
             CALL "SUB179" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11326 CURSOR FOR S11326;"
      *  EXEC SQL DECLARE C11326 CURSOR FOR S11326 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11326 INTO :int1;"
      *  EXEC SQL FETCH C11326 INTO :int1;
             CALL "SUB181" 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 "CLOSE C11326;"
      *  EXEC SQL CLOSE C11326;
             CALL "SUB182" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT COUNT(*) FROM JNULL3 WHERE D2 IS
      -    " NULL"""
             MOVE "SELECT COUNT(*) FROM JNULL3 WHERE D2 IS
      -    " NULL      " TO dstmt

             DISPLAY "PREPARE S11327 FROM :dstmt;"
      *  EXEC SQL PREPARE S11327 FROM :dstmt;
             CALL "SUB183" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11327 CURSOR FOR S11327;"
      *  EXEC SQL DECLARE C11327 CURSOR FOR S11327 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11327 INTO :int1;"
      *  EXEC SQL FETCH C11327 INTO :int1;
             CALL "SUB185" 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 "CLOSE C11327;"
      *  EXEC SQL CLOSE C11327;
             CALL "SUB186" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT AVG(D1) * 10 FROM JNULL3"""
             MOVE "SELECT AVG(D1) * 10 FROM JNULL3           
      -    "        " TO dstmt

             DISPLAY "PREPARE S11328 FROM :dstmt;"
      *  EXEC SQL PREPARE S11328 FROM :dstmt;
             CALL "SUB187" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11328 CURSOR FOR S11328;"
      *  EXEC SQL DECLARE C11328 CURSOR FOR S11328 END-EXEC
             DISPLAY  " "

             DISPLAY "OPEN C11328;"
      *  EXEC SQL OPEN C11328;
             CALL "SUB188" 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
             DISPLAY  " "

             COMPUTE int1 = -1
             DISPLAY "FETCH C11328 INTO :int1;"
      *  EXEC SQL FETCH C11328 INTO :int1;
             CALL "SUB189" 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 15; its value is ", int1
             if (int1  NOT =  15) then
               MOVE 0 TO flag
             END-IF

             DISPLAY "CLOSE C11328;"
      *  EXEC SQL CLOSE C11328;
             CALL "SUB190" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB191" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*)' ||
      *    '  FROM JNULL6' ||
      *    '   WHERE C2 = 1'
      *    );
             CALL "SUB192" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB193" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11329 FROM :longst;"
      *  EXEC SQL PREPARE S11329 FROM :longst;
             CALL "SUB194" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11329 CURSOR FOR S11329;"
      *  EXEC SQL DECLARE C11329 CURSOR FOR S11329 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11329 INTO :int1;"
      *  EXEC SQL FETCH C11329 INTO :int1;
             CALL "SUB196" 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 "CLOSE C11329;"
      *  EXEC SQL CLOSE C11329;
             CALL "SUB197" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB198" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*)' ||
      *    '  FROM JNULL6' ||
      *    '   WHERE C2 IS NULL'
      *    );
             CALL "SUB199" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB200" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S1132A FROM :longst;"
      *  EXEC SQL PREPARE S1132A FROM :longst;
             CALL "SUB201" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C1132A CURSOR FOR S1132A;"
      *  EXEC SQL DECLARE C1132A CURSOR FOR S1132A END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C1132A INTO :int1;"
      *  EXEC SQL FETCH C1132A INTO :int1;
             CALL "SUB203" 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 "CLOSE C1132A;"
      *  EXEC SQL CLOSE C1132A;
             CALL "SUB204" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB205" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*)' ||
      *    '  FROM JNULL6' ||
      *    '   WHERE C2 = C1 AND' ||
      *    '  D1 IS NULL'
      *    );
             CALL "SUB206" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB207" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S1132B FROM :longst;"
      *  EXEC SQL PREPARE S1132B FROM :longst;
             CALL "SUB208" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C1132B CURSOR FOR S1132B;"
      *  EXEC SQL DECLARE C1132B CURSOR FOR S1132B END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C1132B INTO :int1;"
      *  EXEC SQL FETCH C1132B INTO :int1;
             CALL "SUB210" 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 "CLOSE C1132B;"
      *  EXEC SQL CLOSE C1132B;
             CALL "SUB211" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""DROP TABLE JNULL1 CASCADE"""
             MOVE "DROP TABLE JNULL1 CASCADE                         "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB213" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""DROP TABLE JNULL2 CASCADE"""
             MOVE "DROP TABLE JNULL2 CASCADE                         "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB215" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB219" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0624 ********************
      ******************** BEGIN TEST0626 *******************
             MOVE 1 TO flag

             DISPLAY "                  TEST0626 "
             DISPLAY "       ADD COLUMN and DROP COLUMN (dynamic)"
             DISPLAY "References:"
             DISPLAY "    FIPS PUB 127-2 14.1 Transitional SQL feature
      -    " 3"
             DISPLAY "    11.11 <add column definition>"
             DISPLAY "    11.15 <drop column definition>"
             DISPLAY "   - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB220" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE TABLE CHANGG' ||
      *    '  (NAAM CHAR (14) NOT NULL PRIMARY KEY, AGE INT)'
      *    );
             CALL "SUB221" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB222" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB224" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO CHANGG VALUES ('RALPH', 22)"""
             MOVE "INSERT INTO CHANGG VALUES ('RALPH', 22)           "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB226" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO CHANGG VALUES ('RUDOLPH',
      -    " 54)"""
             MOVE "INSERT INTO CHANGG VALUES ('RUDOLPH', 54)         "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB227" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO CHANGG VALUES ('QUEEG', 33)"""
             MOVE "INSERT INTO CHANGG VALUES ('QUEEG', 33)           "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB228" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""INSERT INTO CHANGG VALUES ('BESSIE',
      -    " 106)"""
             MOVE "INSERT INTO CHANGG VALUES ('BESSIE', 106)         "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB229" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *This select should fail 

             DISPLAY "dstmt=""SELECT COUNT(*) FROM CHANGG WHERE DIVORCES
      -    " IS NULL"""
             MOVE "SELECT COUNT(*) FROM CHANGG WHERE DIVORCES
      -    " IS NULL" TO dstmt

             DISPLAY "PREPARE S11331 FROM :dstmt;"
      *  EXEC SQL PREPARE S11331 FROM :dstmt;
             CALL "SUB230" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  =  0) then
               DISPLAY "SQLCODE is 0"
               GO TO P101
             END-IF

             DISPLAY "SQLCODE is ", SQL-COD
             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
             GO TO P100

           .
        P101.
             DISPLAY "DECLARE C11331 CURSOR FOR S11331;"
      *  EXEC SQL DECLARE C11331 CURSOR FOR S11331 END-EXEC
             DISPLAY  " "

             DISPLAY "OPEN C11331;"
      *  EXEC SQL OPEN C11331;
             CALL "SUB231" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  =  0) then
               DISPLAY "SQLCODE is 0"
               GO TO P102
             END-IF

             DISPLAY "SQLCODE is ", SQL-COD
             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
             GO TO P100

           .
        P102.
             DISPLAY "FETCH C11331 INTO :int1;"
      *  EXEC SQL FETCH C11331 INTO :int1;
             CALL "SUB232" 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 "CLOSE C11331;"
      *  EXEC SQL CLOSE C11331;
             CALL "SUB233" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""ALTER TABLE CHANGG ADD NUMBRR CHAR(11)"""
             MOVE "ALTER TABLE CHANGG ADD NUMBRR CHAR(11)            "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB235" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "


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

           PERFORM CHCKOK
             DISPLAY  " "

      *Optional keyword! 
      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB237" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'ALTER TABLE CHANGG' ||
      *    '  ADD COLUMN DIVORCES INT DEFAULT 0'
      *    );
             CALL "SUB238" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB239" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB241" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Check that defaults are correct 

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB243" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*)' ||
      *    '  FROM CHANGG WHERE NUMBRR IS NOT NULL' ||
      *    '  OR DIVORCES <> 0'
      *    );
             CALL "SUB244" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB245" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11332 FROM :longst;"
      *  EXEC SQL PREPARE S11332 FROM :longst;
             CALL "SUB246" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11332 CURSOR FOR S11332;"
      *  EXEC SQL DECLARE C11332 CURSOR FOR S11332 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11332 INTO :int1;"
      *  EXEC SQL FETCH C11332 INTO :int1;
             CALL "SUB248" 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 "CLOSE C11332;"
      *  EXEC SQL CLOSE C11332;
             CALL "SUB249" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *Do some uncomplicated things 

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB250" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'UPDATE CHANGG' ||
      *    '  SET NUMBRR = ''837-47-1847'', DIVORCES = 3' ||
      *    '  WHERE NAAM = ''RUDOLPH'''
      *    );
             CALL "SUB251" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB252" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB253" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB254" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'UPDATE CHANGG' ||
      *    '  SET NUMBRR = ''738-47-1847'', DIVORCES = NULL' ||
      *    '  WHERE NAAM = ''QUEEG'''
      *    );
             CALL "SUB255" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB256" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB257" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""DELETE FROM CHANGG WHERE NUMBRR IS NULL"""
             MOVE "DELETE FROM CHANGG WHERE NUMBRR IS NULL           "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB258" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB259" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO CHANGG (NAAM, AGE, NUMBRR)' ||
      *    '  VALUES (''GOOBER'', 16, ''000-10-0001'')'
      *    );
             CALL "SUB260" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB261" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB262" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB263" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO CHANGG' ||
      *    '  VALUES (''OLIVIA'', 20, ''111-11-1111'', 0)'
      *    );
             CALL "SUB264" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB265" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB266" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB267" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT AGE, NUMBRR, DIVORCES FROM CHANGG' ||
      *    '  WHERE NAAM = ?'
      *    );
             CALL "SUB268" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB269" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11333 FROM :longst;"
      *  EXEC SQL PREPARE S11333 FROM :longst;
             CALL "SUB270" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11333 CURSOR FOR S11333;"
      *  EXEC SQL DECLARE C11333 CURSOR FOR S11333 END-EXEC
             DISPLAY  " "

             MOVE "RUDOLPH       " TO ch3
             DISPLAY "ch3 is '", CH3 "'"

             DISPLAY "OPEN C11333 USING :ch3;"
      *  EXEC SQL OPEN C11333 USING :ch3;
             CALL "SUB271" USING SQLCODE SQLSTATE ch3
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE "xxxxxxxxxxx" TO ch1
             DISPLAY "FETCH C11333 INTO :int1, :ch1, :int2;"
      *  EXEC SQL FETCH C11333 INTO :int1, :ch1, :int2;
             CALL "SUB272" 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

             DISPLAY "CLOSE C11333;"
      *  EXEC SQL CLOSE C11333;
             CALL "SUB273" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             MOVE "QUEEG         " TO ch3
             DISPLAY "ch3 is '", CH3 "'"

             DISPLAY "OPEN C11333 USING :ch3;"
      *  EXEC SQL OPEN C11333 USING :ch3;
             CALL "SUB274" USING SQLCODE SQLSTATE ch3
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE 10 TO ind1
             MOVE "xxxxxxxxxxx" TO ch1
             DISPLAY "FETCH C11333 INTO :int1, :ch1, :int2:ind1;"
      *  EXEC SQL FETCH C11333 INTO :int1, :ch1, :int2:ind1;
             CALL "SUB275" USING SQLCODE SQLSTATE int1 ch1 int2 ind1
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "int1 should be 33; its value is ", int1
             DISPLAY "ind1 should be -1; its value is ", ind1
             DISPLAY "ch1 should be '738-47-1847'; its value is '"
             ch1 "'"
             if (int1  NOT =  33  OR  ind1  NOT =  -1) then
               MOVE 0 TO flag
             END-IF
             if (ch1  NOT  =   "738-47-1847"then
               MOVE 0 TO flag
             END-IF

             DISPLAY "CLOSE C11333;"
      *  EXEC SQL CLOSE C11333;
             CALL "SUB276" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             MOVE "GOOBER        " TO ch3
             DISPLAY "ch3 is '", CH3 "'"

             DISPLAY "OPEN C11333 USING :ch3;"
      *  EXEC SQL OPEN C11333 USING :ch3;
             CALL "SUB277" USING SQLCODE SQLSTATE ch3
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE "xxxxxxxxxxx" TO ch1
             DISPLAY "FETCH C11333 INTO :int1, :ch1, :int2;"
      *  EXEC SQL FETCH C11333 INTO :int1, :ch1, :int2;
             CALL "SUB278" 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

             DISPLAY "CLOSE C11333;"
      *  EXEC SQL CLOSE C11333;
             CALL "SUB279" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             MOVE "OLIVIA        " TO ch3
             DISPLAY "ch3 is '", CH3 "'"

             DISPLAY "OPEN C11333 USING :ch3;"
      *  EXEC SQL OPEN C11333 USING :ch3;
             CALL "SUB280" USING SQLCODE SQLSTATE ch3
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             COMPUTE int1 = -1
             COMPUTE int2 = -1
             MOVE "xxxxxxxxxxx" TO ch1
             DISPLAY "FETCH C11333 INTO :int1, :ch1, :int2;"
      *  EXEC SQL FETCH C11333 INTO :int1, :ch1, :int2;
             CALL "SUB281" 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

             DISPLAY "CLOSE C11333;"
      *  EXEC SQL CLOSE C11333;
             CALL "SUB282" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT COUNT(*) FROM CHANGG"""
             MOVE "SELECT COUNT(*) FROM CHANGG               
      -    "        " TO dstmt

             DISPLAY "PREPARE S11334 FROM :dstmt;"
      *  EXEC SQL PREPARE S11334 FROM :dstmt;
             CALL "SUB283" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11334 CURSOR FOR S11334;"
      *  EXEC SQL DECLARE C11334 CURSOR FOR S11334 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11334 INTO :int1;"
      *  EXEC SQL FETCH C11334 INTO :int1;
             CALL "SUB285" 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 "CLOSE C11334;"
      *  EXEC SQL CLOSE C11334;
             CALL "SUB286" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Age is nobody's business! 

             DISPLAY "dstmt=""ALTER TABLE CHANGG DROP AGE CASCADE"""
             MOVE "ALTER TABLE CHANGG DROP AGE CASCADE               "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB288" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *Optional keyword! 

             DISPLAY "dstmt=""ALTER TABLE CHANGG DROP COLUMN DIVORCES
      -    " RESTRICT"""
             MOVE "ALTER TABLE CHANGG DROP COLUMN DIVORCES RESTRICT  "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB290" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *This select should fail 

             DISPLAY "dstmt=""SELECT COUNT(*) FROM CHANGG WHERE AGE >
      -    " 30"""
             MOVE "SELECT COUNT(*) FROM CHANGG WHERE AGE > 30
      -    "        " TO dstmt

             DISPLAY "PREPARE S11335 FROM :dstmt;"
      *  EXEC SQL PREPARE S11335 FROM :dstmt;
             CALL "SUB292" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  =  0) then
               DISPLAY "SQLCODE is 0"
               GO TO P104
             END-IF

             DISPLAY "SQLCODE is ", SQL-COD
             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
             GO TO P103

           .
        P104.
             DISPLAY "DECLARE C11335 CURSOR FOR S11335;"
      *  EXEC SQL DECLARE C11335 CURSOR FOR S11335 END-EXEC
             DISPLAY  " "

             DISPLAY "OPEN C11335;"
      *  EXEC SQL OPEN C11335;
             CALL "SUB293" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  =  0) then
               DISPLAY "SQLCODE is 0"
               GO TO P105
             END-IF

             DISPLAY "SQLCODE is ", SQL-COD
             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
             GO TO P103

           .
        P105.
             DISPLAY "FETCH C11335 INTO :int1;"
      *  EXEC SQL FETCH C11335 INTO :int1;
             CALL "SUB294" 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 "CLOSE C11335;"
      *  EXEC SQL CLOSE C11335;
             CALL "SUB295" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

           .
        P103.
             MOVE "xxxxx" TO SQLSTATE

      *This select should fail too 

             DISPLAY "dstmt=""SELECT COUNT(*) FROM CHANGG WHERE DIVORCES
      -    " IS NULL"""
             MOVE "SELECT COUNT(*) FROM CHANGG WHERE DIVORCES
      -    " IS NULL" TO dstmt

             DISPLAY "PREPARE S11336 FROM :dstmt;"
      *  EXEC SQL PREPARE S11336 FROM :dstmt;
             CALL "SUB296" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  =  0) then
               DISPLAY "SQLCODE is 0"
               GO TO P107
             END-IF

             DISPLAY "SQLCODE is ", SQL-COD
             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
             GO TO P106

           .
        P107.
             DISPLAY "DECLARE C11336 CURSOR FOR S11336;"
      *  EXEC SQL DECLARE C11336 CURSOR FOR S11336 END-EXEC
             DISPLAY  " "

             DISPLAY "OPEN C11336;"
      *  EXEC SQL OPEN C11336;
             CALL "SUB297" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  =  0) then
               DISPLAY "SQLCODE is 0"
               GO TO P108
             END-IF

             DISPLAY "SQLCODE is ", SQL-COD
             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
             GO TO P106

           .
        P108.
             DISPLAY "FETCH C11336 INTO :int1;"
      *  EXEC SQL FETCH C11336 INTO :int1;
             CALL "SUB298" 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 "CLOSE C11336;"
      *  EXEC SQL CLOSE C11336;
             CALL "SUB299" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

           .
        P106.
             MOVE "xxxxxxxxxxxxxx" TO ch2

             DISPLAY "dstmt=""SELECT NAAM FROM CHANGG WHERE NUMBRR LIKE
      -    " '%000%'"""
             MOVE "SELECT NAAM FROM CHANGG WHERE NUMBRR LIKE '%000%' "
             TO dstmt

             DISPLAY "PREPARE S11337 FROM :dstmt;"
      *  EXEC SQL PREPARE S11337 FROM :dstmt;
             CALL "SUB300" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11337 CURSOR FOR S11337;"
      *  EXEC SQL DECLARE C11337 CURSOR FOR S11337 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11337 INTO :ch2;"
      *  EXEC SQL FETCH C11337 INTO :ch2;
             CALL "SUB302" 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 "CLOSE C11337;"
      *  EXEC SQL CLOSE C11337;
             CALL "SUB303" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""ALTER TABLE CHANGG DROP NAAM RESTRICT"""
             MOVE "ALTER TABLE CHANGG DROP NAAM RESTRICT             "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB305" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "COMMIT WORK;"
      *  EXEC SQL COMMIT WORK;
             CALL "SUB306" 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) 
             DISPLAY "dstmt=""ALTER TABLE CHANGG DROP NUMBRR RESTRICT"""
             MOVE "ALTER TABLE CHANGG DROP NUMBRR RESTRICT           "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB307" USING SQLCODE SQLSTATE dstmt
             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 "SUB308" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
             DISPLAY  " "
      *TEd Hook #2 

             DISPLAY "dstmt=""DROP TABLE CHANGG CASCADE"""
             MOVE "DROP TABLE CHANGG CASCADE                         "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB309" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB313" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0626 ********************
      ******************** BEGIN TEST0632 *******************
             MOVE 1 TO flag

             DISPLAY "                  TEST0632 "
             DISPLAY "      Datetimes in a <default clause> (dynamic)"
             DISPLAY "References:"
             DISPLAY "    FIPS PUB 127-2 14.1 Transitional SQL features
      -    " 1, 5"
             DISPLAY "    11.5 <default clause>"
             DISPLAY "    6.8  <datetime value function>"
             DISPLAY "    5.3  <literal>"
             DISPLAY "   - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB314" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    '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 "SUB315" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB316" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB318" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB320" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    '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 "SUB321" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB322" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB324" USING SQLCODE SQLSTATE longst
             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 "SUB325" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB326" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO OBITUARIES (NAAM, TESTING1, TESTING2)' ||
      *    '  VALUES (?, CURRENT_DATE, CURRENT_TIMESTAMP)'
      *    );
             CALL "SUB327" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB328" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11341 FROM :longst;"
      *  EXEC SQL PREPARE S11341 FROM :longst;
             CALL "SUB329" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             MOVE "KEITH         " TO ch2
             DISPLAY "ch2 is '", ch2 "'"

             DISPLAY "EXECUTE S11341 USING :ch2;"
      *  EXEC SQL EXECUTE S11341 USING :ch2;
             CALL "SUB330" USING SQLCODE SQLSTATE ch2
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB331" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO BIRTHS (NAAM, TESTING)' ||
      *    '  VALUES (''BJORN'', CURRENT_TIME)'
      *    );
             CALL "SUB332" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB333" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB334" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB335" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT EXTRACT (HOUR FROM CHECKIN) +'    ||
      *    '       EXTRACT (MINUTE FROM CHECKIN) +'  ||
      *    '       EXTRACT (SECOND FROM CHECKIN)'    ||
      *    '  FROM BIRTHS'
      *    );
             CALL "SUB336" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB337" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11342 FROM :longst;"
      *  EXEC SQL PREPARE S11342 FROM :longst;
             CALL "SUB338" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11342 CURSOR FOR S11342;"
      *  EXEC SQL DECLARE C11342 CURSOR FOR S11342 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11342 INTO :int1;"
      *  EXEC SQL FETCH C11342 INTO :int1;
             CALL "SUB340" 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 "CLOSE C11342;"
      *  EXEC SQL CLOSE C11342;
             CALL "SUB341" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""SELECT EXTRACT (HOUR FROM LABOR) FROM
      -    " BIRTHS"""
             MOVE "SELECT EXTRACT (HOUR FROM LABOR) FROM BIRTHS      "
             TO dstmt

             DISPLAY "PREPARE S11343 FROM :dstmt;"
      *  EXEC SQL PREPARE S11343 FROM :dstmt;
             CALL "SUB342" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11343 CURSOR FOR S11343;"
      *  EXEC SQL DECLARE C11343 CURSOR FOR S11343 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11343 INTO :int1;"
      *  EXEC SQL FETCH C11343 INTO :int1;
             CALL "SUB344" 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 "CLOSE C11343;"
      *  EXEC SQL CLOSE C11343;
             CALL "SUB345" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB346" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT (*) FROM BIRTHS' ||
      *    '  WHERE TESTING <> CHECKOUT OR CHECKOUT IS NULL'
      *    );
             CALL "SUB347" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB348" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11344 FROM :longst;"
      *  EXEC SQL PREPARE S11344 FROM :longst;
             CALL "SUB349" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11344 CURSOR FOR S11344;"
      *  EXEC SQL DECLARE C11344 CURSOR FOR S11344 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11344 INTO :int1;"
      *  EXEC SQL FETCH C11344 INTO :int1;
             CALL "SUB351" 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 "CLOSE C11344;"
      *  EXEC SQL CLOSE C11344;
             CALL "SUB352" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB353" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT (*) 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 "SUB354" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB355" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11345 FROM :longst;"
      *  EXEC SQL PREPARE S11345 FROM :longst;
             CALL "SUB356" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11345 CURSOR FOR S11345;"
      *  EXEC SQL DECLARE C11345 CURSOR FOR S11345 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11345 INTO :int1;"
      *  EXEC SQL FETCH C11345 INTO :int1;
             CALL "SUB358" 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 "CLOSE C11345;"
      *  EXEC SQL CLOSE C11345;
             CALL "SUB359" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""DROP TABLE BIRTHS CASCADE"""
             MOVE "DROP TABLE BIRTHS CASCADE                         "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB361" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""DROP TABLE OBITUARIES CASCADE"""
             MOVE "DROP TABLE OBITUARIES CASCADE                     "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB363" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

      *  EXEC SQL COMMIT WORK;
             CALL "SUB367" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      ******************** END TEST0632 ********************
      ******************** BEGIN TEST0634 *******************
             MOVE 1 TO flag

             DISPLAY "                  TEST0634 "
             DISPLAY "           TRIM function (dynamic)"
             DISPLAY "References:"
             DISPLAY "    FIPS PUB 127-2 14.1 Transitional SQL features
      -    " 1,7"
             DISPLAY "   - - - - - - - - - - - - - - - - - - -"

             COMPUTE SQLCODE = -1
             MOVE "xxxxx" TO SQLSTATE

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB368" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'CREATE TABLE WEIRDPAD (' ||
      *    '  NAAM CHAR (14),'       ||
      *    '  SPONSOR CHAR (14))'
      *    );
             CALL "SUB369" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB370" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL COMMIT WORK;
             CALL "SUB371" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB372" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB374" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO WEIRDPAD VALUES' ||
      *    '  (''KATEBBBBBBBBBB'', ''000000000KEITH'')'
      *    );
             CALL "SUB375" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB376" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB377" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB378" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'INSERT INTO WEIRDPAD VALUES' ||
      *    '  (''    KEITH     '', ''XXXXKATEXXXXXX'')'
      *    );
             CALL "SUB379" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB380" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "EXECUTE IMMEDIATE :longst;"
      *  EXEC SQL EXECUTE IMMEDIATE :longst;
             CALL "SUB381" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB382" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT TRIM (''X'' FROM SPONSOR)' ||
      *    '  FROM WEIRDPAD'                  ||
      *    '  WHERE TRIM (NAAM) = ''KEITH'''
      *    );
             CALL "SUB383" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB384" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11351 FROM :longst;"
      *  EXEC SQL PREPARE S11351 FROM :longst;
             CALL "SUB385" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11351 CURSOR FOR S11351;"
      *  EXEC SQL DECLARE C11351 CURSOR FOR S11351 END-EXEC
             DISPLAY  " "

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

             MOVE "BLAHBLAHBLAHBL" TO ch2
             DISPLAY "FETCH C11351 INTO :ch2;"
      *  EXEC SQL FETCH C11351 INTO :ch2;
             CALL "SUB387" USING SQLCODE SQLSTATE ch2
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch2 should be 'KATE'; its value is '", ch2 "'"

      *In languages with variable length strings, the result should 
      *not have trailing blanks.                                    
      *   if (ch2  NOT =  "KATE")                            

             if (ch2  NOT  =   "KATE"then
               MOVE 0 TO flag
             END-IF

             DISPLAY "CLOSE C11351;"
      *  EXEC SQL CLOSE C11351;
             CALL "SUB388" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB389" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT TRIM (LEADING ''X'' FROM SPONSOR)' ||
      *    '  FROM WEIRDPAD'                          ||
      *    '  WHERE TRIM (TRAILING FROM NAAM) = ''    KEITH'''
      *    );
             CALL "SUB390" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB391" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11352 FROM :longst;"
      *  EXEC SQL PREPARE S11352 FROM :longst;
             CALL "SUB392" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11352 CURSOR FOR S11352;"
      *  EXEC SQL DECLARE C11352 CURSOR FOR S11352 END-EXEC
             DISPLAY  " "

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

             MOVE "BLAHBLAHBLAHBL" TO ch2
             DISPLAY "FETCH C11352 INTO :ch2;"
      *  EXEC SQL FETCH C11352 INTO :ch2;
             CALL "SUB394" USING SQLCODE SQLSTATE ch2
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY "ch2 should be 'KATEXXXXXX'; its value is '"
             ch2 "'"

      *In languages with variable length strings, the result should 
      *not have trailing blanks.                                    
      *   if (ch2  NOT =  "KATEXXXXXX")                            

             if (ch2  NOT  =   "KATEXXXXXX"then
               MOVE 0 TO flag
             END-IF

             DISPLAY "CLOSE C11352;"
      *  EXEC SQL CLOSE C11352;
             CALL "SUB395" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB396" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*) FROM WEIRDPAD A,' ||
      *    '  WEIRDPAD B WHERE TRIM (BOTH ''B'' FROM A.NAAM)' ||
      *    '  = TRIM (BOTH ''X'' FROM B.SPONSOR)'
      *    );
             CALL "SUB397" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB398" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11353 FROM :longst;"
      *  EXEC SQL PREPARE S11353 FROM :longst;
             CALL "SUB399" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11353 CURSOR FOR S11353;"
      *  EXEC SQL DECLARE C11353 CURSOR FOR S11353 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11353 INTO :int1;"
      *  EXEC SQL FETCH C11353 INTO :int1;
             CALL "SUB401" 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 "CLOSE C11353;"
      *  EXEC SQL CLOSE C11353;
             CALL "SUB402" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB403" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT COUNT(*) FROM WEIRDPAD A,'                      
      *  ||
      *    '  WEIRDPAD B WHERE TRIM (LEADING ''0'' FROM A.SPONSOR)'
      *  ||
      *    '  = TRIM ('' '' FROM B.NAAM)'
      *    );
             CALL "SUB404" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB405" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11354 FROM :longst;"
      *  EXEC SQL PREPARE S11354 FROM :longst;
             CALL "SUB406" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "DECLARE C11354 CURSOR FOR S11354;"
      *  EXEC SQL DECLARE C11354 CURSOR FOR S11354 END-EXEC
             DISPLAY  " "

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

             COMPUTE int1 = -1
             DISPLAY "FETCH C11354 INTO :int1;"
      *  EXEC SQL FETCH C11354 INTO :int1;
             CALL "SUB408" 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 "CLOSE C11354;"
      *  EXEC SQL CLOSE C11354;
             CALL "SUB409" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

      *  EXEC SQL DELETE FROM CONCATBUF;
             CALL "SUB410" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL INSERT INTO CONCATBUF VALUES (
      *    'SELECT TRIM (''BB'' FROM NAAM)'  ||
      *    '  FROM WEIRDPAD WHERE NAAM LIKE' ||
      *    '  ''KATE%'''
      *    );
             CALL "SUB411" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
      *  EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
             CALL "SUB412" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             DISPLAY "longst=""", longst """"

             DISPLAY "PREPARE S11355 FROM :longst;"
      *  EXEC SQL PREPARE S11355 FROM :longst;
             CALL "SUB413" USING SQLCODE SQLSTATE longst
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  =  0) then
               DISPLAY "SQLCODE is 0"
               GO TO P111
             END-IF

             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22027; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22027"then
               MOVE 0 TO flag
             END-IF
             GO TO P110

           .
        P111.
             DISPLAY "DECLARE C11355 CURSOR FOR S11355;"
      *  EXEC SQL DECLARE C11355 CURSOR FOR S11355 END-EXEC
             DISPLAY  " "

             DISPLAY "OPEN C11355;"
      *  EXEC SQL OPEN C11355;
             CALL "SUB414" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD

             if (SQLCODE  =  0) then
               DISPLAY "SQLCODE is 0"
               GO TO P109
             END-IF

             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22027; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22027"then
               MOVE 0 TO flag
             END-IF
             GO TO P110

           .
        P109.
             DISPLAY "FETCH C11355 INTO :int1;"
      *  EXEC SQL FETCH C11355 INTO :int1;
             CALL "SUB415" USING SQLCODE SQLSTATE int1
             MOVE SQLCODE TO SQL-COD
             DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
             DISPLAY "SQLSTATE should be 22027; its value is ", SQLSTATE
             if (SQLCODE  NOT <  0  OR  SQLSTATE  NOT  =   "22027"then
               MOVE 0 TO flag
             END-IF

             DISPLAY "CLOSE C11355;"
      *  EXEC SQL CLOSE C11355;
             CALL "SUB416" USING SQLCODE SQLSTATE
             MOVE SQLCODE TO SQL-COD
           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

             DISPLAY "dstmt=""DROP TABLE WEIRDPAD CASCADE"""
             MOVE "DROP TABLE WEIRDPAD CASCADE                       "
             TO dstmt

             DISPLAY "EXECUTE IMMEDIATE :dstmt;"
      *  EXEC SQL EXECUTE IMMEDIATE :dstmt;
             CALL "SUB418" USING SQLCODE SQLSTATE dstmt
             MOVE SQLCODE TO SQL-COD

           PERFORM CHCKOK
             DISPLAY  " "

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

           PERFORM CHCKOK
             DISPLAY  " "

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

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

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

Messung V0.5 in Prozent
C=80 H=100 G=90

¤ 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.0.138Bemerkung:  (Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-04-28) ¤

*Bot Zugriff






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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 und die Messung sind noch experimentell.