IDENTIFICATION DIVISION.
PROGRAM-ID. DML106.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. xyz.
OBJECT-COMPUTER. xyz.
DATA DIVISION.
WORKING-STORAGE SECTION.
* Standard COBOL (file "DML106.SCO") calling SQL
* procedures in file "DML106.MCO".
****************************************************************
*
* COMMENT SECTION
*
* DATE 1993/08/20 STANDARD COBOL LANGUAGE
* NIST SQL VALIDATION TEST SUITE V6.0
* DISCLAIMER:
* This program was written by employees of NIST to test SQL
* implementations for conformance to the SQL standards.
* NIST assumes no responsibility for any party's use of
* this program.
*
* DML106.SCO
* WRITTEN BY: Joan Sullivan and David Flater
* TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE
*
* This routine tests several FIPS features in Transitional
* SQL. This is the non-dynamic version of DML107.
*
* REFERENCES
* FIPS PUB 127-2 14.1 Transitional SQL
* ANSI SQL-1992
*
****************************************************************
* EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 SQLCODE PIC S9(9) COMP.
01 SQLSTATE PIC X(5).
01 uid PIC X(18).
01 uidx PIC X(18).
01 ch15 PIC X(15).
01 ch3 PIC X(3).
01 int1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
* EXEC SQL END DECLARE SECTION END-EXEC
01 norm1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 norm2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 ALPNUM-TABLE VALUE IS
"01234ABCDEFGH56789IJKLMNOPQRSTUVWXYZ".
05 ALPNUM PIC X OCCURS 36 TIMES.
01 NORMSQ.
05 NORMSQX PIC X OCCURS 5 TIMES.
01 errcnt PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
*date_time declaration
01 TO-DAY PIC 9(6).
01 THE-TIME PIC 9(8).
01 flag PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
PROCEDURE DIVISION.
P0.
MOVE "FLATER " TO uid
CALL "AUTHID" USING uid
MOVE "not logged in, not" TO uidx
* EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO;
CALL "SUB1" USING SQLCODE SQLSTATE uidx
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB2" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
if (uid NOT = uidx) then
DISPLAY "ERROR: User ", uid " expected. User ", uidx "
- " connected"
STOP RUN
END-IF
MOVE 0 TO errcnt
DISPLAY
"SQL Test Suite, V6.0, Module COBOL, dml106.sco"
DISPLAY
"59-byte ID"
DISPLAY "TEd Version #"
*date_time print
ACCEPT TO-DAY FROM DATE
ACCEPT THE-TIME FROM TIME
DISPLAY "Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
******************** BEGIN TEST0599 *******************
MOVE 1 TO flag
DISPLAY " TEST0599 "
DISPLAY " UNION in views (feature 8) (static)"
DISPLAY "References:"
DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
- " 8"
DISPLAY " ANSI SQL-1992 11.19 "
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
DISPLAY "CREATE VIEW UUSIG (U1) AS"
DISPLAY " SELECT C1 FROM USIG UNION SELECT C_1 FROM USIG;"
* EXEC SQL CREATE VIEW UUSIG (U1) AS
* SELECT C1 FROM USIG UNION SELECT C_1 FROM USIG;
CALL "SUB3" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB4" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1 FROM UUSIG;"
* EXEC SQL SELECT COUNT(*) INTO :int1 FROM UUSIG;
CALL "SUB5" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4; its value is ", int1
if (int1 NOT = 4) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(DISTINCT U1) INTO :int1 FROM UUSIG;"
* EXEC SQL SELECT COUNT(DISTINCT U1) INTO :int1 FROM UUSIG
* ;
CALL "SUB6" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4; its value is ", int1
if (int1 NOT = 4) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1 FROM UUSIG WHERE U1 <
- " 0"
DISPLAY " OR U1 > 3 OR U1 IS NULL;"
* EXEC SQL SELECT COUNT(*) INTO :int1 FROM UUSIG WHERE U1 < 0
* OR U1 > 3 OR U1 IS NULL;
CALL "SUB7" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
if (int1 NOT = 0) then
MOVE 0 TO flag
END-IF
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB8" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW ABOVE_AVERAGE (COLUMN_1, COLUMN_2,
- " COLUMN_3) AS"
DISPLAY " SELECT PNUM, BUDGET, CITY"
DISPLAY " FROM HU.PROJ OUTER_REF"
DISPLAY " WHERE BUDGET >= (SELECT AVG(BUDGET) FROM
- " HU.PROJ INNER_REF"
DISPLAY " WHERE OUTER_REF.CITY =
- " INNER_REF.CITY)"
DISPLAY " UNION"
DISPLAY " SELECT 'MAX', MAX(BUDGET), MIN(CITY)"
DISPLAY " FROM HU.PROJ "
DISPLAY " WHERE CITY > 'Deale';"
* EXEC SQL CREATE VIEW ABOVE_AVERAGE (COLUMN_1,
* COLUMN_2, COLUMN_3) AS
* SELECT PNUM, BUDGET, CITY
* FROM HU.PROJ OUTER_REF
* WHERE BUDGET >= (SELECT AVG(BUDGET) FROM HU.PROJ
* INNER_REF
* WHERE OUTER_REF.CITY = INNER_REF.CITY)
* UNION
* SELECT 'MAX', MAX(BUDGET), MIN(CITY)
* FROM HU.PROJ
* WHERE CITY > 'Deale';
CALL "SUB9" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB10" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE UNION1 CURSOR FOR"
DISPLAY " SELECT * FROM ABOVE_AVERAGE ORDER BY COLUMN_1;"
* EXEC SQL DECLARE UNION1 CURSOR FOR
* SELECT * FROM ABOVE_AVERAGE ORDER BY COLUMN_1 END-EXEC
DISPLAY "OPEN UNION1;"
* EXEC SQL OPEN UNION1;
CALL "SUB11" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE "xxx" TO ch3
COMPUTE int1 = -1
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
* EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15;
CALL "SUB12" USING SQLCODE SQLSTATE ch3 int1 ch15
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch3 should be 'MAX'; its value is ", ch3
DISPLAY "int1 should be 30000; its value is ", int1
DISPLAY "ch15 should be 'Tampa'; its value is ", ch15
if (ch3 NOT = "MAX" OR int1 NOT = 30000 OR ch15
NOT = "Tampa ") then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
COMPUTE int1 = -1
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
* EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15;
CALL "SUB13" USING SQLCODE SQLSTATE ch3 int1 ch15
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch3 should be 'P2 '; its value is ", ch3
DISPLAY "int1 should be 30000; its value is ", int1
DISPLAY "ch15 should be 'Vienna'; its value is ", ch15
if (ch3 NOT = "P2 " OR int1 NOT = 30000 OR ch15
NOT = "Vienna ") then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
COMPUTE int1 = -1
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
* EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15;
CALL "SUB14" USING SQLCODE SQLSTATE ch3 int1 ch15
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch3 should be 'P3 '; its value is ", ch3
DISPLAY "int1 should be 30000; its value is ", int1
DISPLAY "ch15 should be 'Tampa'; its value is ", ch15
if (ch3 NOT = "P3 " OR int1 NOT = 30000 OR ch15
NOT = "Tampa ") then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
COMPUTE int1 = -1
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
* EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15;
CALL "SUB15" USING SQLCODE SQLSTATE ch3 int1 ch15
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch3 should be 'P6 '; its value is ", ch3
DISPLAY "int1 should be 50000; its value is ", int1
DISPLAY "ch15 should be 'Deale'; its value is ", ch15
if (ch3 NOT = "P6 " OR int1 NOT = 50000 OR ch15
NOT = "Deale ") then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH UNION1 INTO :ch3, :int1, :ch15; "
* EXEC SQL FETCH UNION1 INTO :ch3, :int1, :ch15;
CALL "SUB16" USING SQLCODE SQLSTATE ch3 int1 ch15
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
if (SQLCODE NOT = 100) then
MOVE 0 TO flag
END-IF
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB17" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY " CREATE VIEW STAFF_DUP AS"
DISPLAY " SELECT EMPNUM, EMPNAME, GRADE, CITY"
DISPLAY " FROM HU.STAFF"
DISPLAY " UNION ALL"
DISPLAY " SELECT * FROM HU.STAFF3;"
* EXEC SQL CREATE VIEW STAFF_DUP AS
* SELECT EMPNUM, EMPNAME, GRADE, CITY
* FROM HU.STAFF
* UNION ALL
* SELECT * FROM HU.STAFF3;
CALL "SUB18" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB19" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE UNION2 CURSOR FOR"
DISPLAY " SELECT EMPNUM, CITY FROM STAFF_DUP ORDER BY
- " CITY;"
* EXEC SQL DECLARE UNION2 CURSOR FOR
* SELECT EMPNUM, CITY FROM STAFF_DUP ORDER BY CITY END-EXEC
DISPLAY "OPEN UNION2;"
* EXEC SQL OPEN UNION2;
CALL "SUB20" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION2 INTO :ch3, :ch15;"
* EXEC SQL FETCH UNION2 INTO :ch3, :ch15;
CALL "SUB21" USING SQLCODE SQLSTATE ch3 ch15
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch3 should be 'E5 '; its value is ", ch3
DISPLAY "ch15 should be 'Akron'; its value is ", ch15
if (ch3 NOT = "E5 " OR ch15 NOT = "Akron
- " ") then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION2 INTO :ch3, :ch15;"
* EXEC SQL FETCH UNION2 INTO :ch3, :ch15;
CALL "SUB22" USING SQLCODE SQLSTATE ch3 ch15
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch3 should be 'E5 '; its value is ", ch3
DISPLAY "ch15 should be 'Akron'; its value is ", ch15
if (ch3 NOT = "E5 " OR ch15 NOT = "Akron
- " ") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1 FROM STAFF_DUP;"
* EXEC SQL SELECT COUNT(*) INTO :int1 FROM STAFF_DUP;
CALL "SUB23" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 10; its value is ", int1
if (int1 NOT = 10) then
MOVE 0 TO flag
END-IF
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB24" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW FOUR_CITIES (C1, C2, C3) AS"
DISPLAY " SELECT 'P', CITY, 666"
DISPLAY " FROM HU.PROJ"
DISPLAY " WHERE BUDGET <> 30000"
DISPLAY " UNION"
DISPLAY " SELECT 'S', CITY, 777"
DISPLAY " FROM HU.STAFF"
DISPLAY " WHERE EMPNAME <> 'Ed'"
DISPLAY " UNION"
DISPLAY " SELECT 'T', CITY, -999"
DISPLAY " FROM HU.STAFF3"
DISPLAY " WHERE CITY NOT LIKE 'V",
DISPLAY " UNION"
DISPLAY " SELECT 'X', CITY, -1"
DISPLAY " FROM HU.STAFF3"
DISPLAY " WHERE CITY = 'Vienna';"
* EXEC SQL CREATE VIEW FOUR_CITIES (C1, C2, C3) AS
* SELECT 'P', CITY, 666
* FROM HU.PROJ
* WHERE BUDGET <> 30000
* UNION
* SELECT 'S', CITY, 777
* FROM HU.STAFF
* WHERE EMPNAME <> 'Ed'
* UNION
* SELECT 'T', CITY, -999
* FROM HU.STAFF3
* WHERE CITY NOT LIKE 'V%'
* UNION
* SELECT 'X', CITY, -1
* FROM HU.STAFF3
* WHERE CITY = 'Vienna';
CALL "SUB25" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB26" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE UNION3 CURSOR FOR"
DISPLAY " SELECT C2, C1, C3 FROM FOUR_CITIES ORDER BY C3,
- " C2;"
* EXEC SQL DECLARE UNION3 CURSOR FOR
* SELECT C2, C1, C3 FROM FOUR_CITIES ORDER BY C3, C2
* END-EXEC
DISPLAY "OPEN UNION3;"
* EXEC SQL OPEN UNION3;
CALL "SUB27" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
* EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1;
CALL "SUB28" USING SQLCODE SQLSTATE ch15 ch3 int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch15 should be 'Akron'; its value is ", ch15
DISPLAY "ch3 should be 'T'; its value is ", ch3
DISPLAY "int1 should be -999; its value is ", int1
if (ch15 NOT = "Akron " OR ch3 NOT = "T
- " " OR int1 NOT = -999) then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
* EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1;
CALL "SUB29" USING SQLCODE SQLSTATE ch15 ch3 int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch15 should be 'Deale'; its value is ", ch15
DISPLAY "ch3 should be 'T'; its value is ", ch3
DISPLAY "int1 should be -999; its value is ", int1
if (ch15 NOT = "Deale " OR ch3 NOT = "T
- " " OR int1 NOT = -999) then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
* EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1;
CALL "SUB30" USING SQLCODE SQLSTATE ch15 ch3 int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch15 should be 'Vienna'; its value is ", ch15
DISPLAY "ch3 should be 'X'; its value is ", ch3
DISPLAY "int1 should be -1; its value is ", int1
if (ch15 NOT = "Vienna " OR ch3 NOT = "X
- " " OR int1 NOT = -1) then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
* EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1;
CALL "SUB31" USING SQLCODE SQLSTATE ch15 ch3 int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch15 should be 'Deale'; its value is ", ch15
DISPLAY "ch3 should be 'P'; its value is ", ch3
DISPLAY "int1 should be 666; its value is ", int1
if (ch15 NOT = "Deale " OR ch3 NOT = "P
- " " OR int1 NOT = 666) then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
* EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1;
CALL "SUB32" USING SQLCODE SQLSTATE ch15 ch3 int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch15 should be 'Vienna'; its value is ", ch15
DISPLAY "ch3 should be 'P'; its value is ", ch3
DISPLAY "int1 should be 666; its value is ", int1
if (ch15 NOT = "Vienna " OR ch3 NOT = "P
- " " OR int1 NOT = 666) then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
* EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1;
CALL "SUB33" USING SQLCODE SQLSTATE ch15 ch3 int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch15 should be 'Deale'; its value is ", ch15
DISPLAY "ch3 should be 'S'; its value is ", ch3
DISPLAY "int1 should be 777; its value is ", int1
if (ch15 NOT = "Deale " OR ch3 NOT = "S
- " " OR int1 NOT = 777) then
MOVE 0 TO flag
END-IF
MOVE "xxx" TO ch3
MOVE "xxxxxxxxxxxxxxx" TO ch15
DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
* EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1;
CALL "SUB34" USING SQLCODE SQLSTATE ch15 ch3 int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "ch15 should be 'Vienna'; its value is ", ch15
DISPLAY "ch3 should be 'S'; its value is ", ch3
DISPLAY "int1 should be 777; its value is ", int1
if (ch15 NOT = "Vienna " OR ch3 NOT = "S
- " " OR int1 NOT = 777) then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH UNION3 INTO :ch15, :ch3, :int1;"
* EXEC SQL FETCH UNION3 INTO :ch15, :ch3, :int1;
CALL "SUB35" USING SQLCODE SQLSTATE ch15 ch3 int1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
if (SQLCODE NOT = 100) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT COUNT (*) INTO :int1 FROM FOUR_CITIES;"
* EXEC SQL SELECT COUNT (*) INTO :int1 FROM FOUR_CITIES
* ;
CALL "SUB36" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 7; its value is ", int1
if (int1 NOT = 7) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1 FROM FOUR_CITIES WHERE
- " C3 > 0;"
* EXEC SQL SELECT COUNT(*) INTO :int1 FROM FOUR_CITIES WHERE
* C3 > 0;
CALL "SUB37" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4; its value is ", int1
if (int1 NOT = 4) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1 FROM FOUR_CITIES WHERE
- " C2 = 'Vienna';"
* EXEC SQL SELECT COUNT(*) INTO :int1 FROM FOUR_CITIES WHERE
* C2 = 'Vienna';
CALL "SUB38" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 3; its value is ", int1
if (int1 NOT = 3) then
MOVE 0 TO flag
END-IF
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB39" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP VIEW ABOVE_AVERAGE CASCADE;"
* EXEC SQL DROP VIEW ABOVE_AVERAGE CASCADE;
CALL "SUB40" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB41" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP VIEW STAFF_DUP CASCADE;"
* EXEC SQL DROP VIEW STAFF_DUP CASCADE;
CALL "SUB42" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB43" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP VIEW FOUR_CITIES CASCADE;"
* EXEC SQL DROP VIEW FOUR_CITIES CASCADE;
CALL "SUB44" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB45" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP VIEW UUSIG CASCADE;"
* EXEC SQL DROP VIEW UUSIG CASCADE;
CALL "SUB46" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB47" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0599','pass','MCO');
CALL "SUB48" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml106.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0599','fail','MCO');
CALL "SUB49" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB50" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0599 ********************
******************** BEGIN TEST0601 *******************
MOVE 1 TO flag
DISPLAY " TEST0601 "
DISPLAY " DATETIME data types (feature 5) (static)"
DISPLAY "References:"
DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
- " 5"
DISPLAY " ANSI SQL-1992 6.1 "
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
DISPLAY "CREATE TABLE TEMPUS (TDATE DATE, TTIME TIME,"
DISPLAY " TTIMESTAMP TIMESTAMP, TINT1 INTERVAL YEAR TO
- " MONTH,"
DISPLAY " TINT2 INTERVAL DAY TO SECOND);"
* EXEC SQL CREATE TABLE TEMPUS (TDATE DATE, TTIME
* TIME,
* TTIMESTAMP TIMESTAMP, TINT1 INTERVAL YEAR TO MONTH,
* TINT2 INTERVAL DAY TO SECOND);
CALL "SUB51" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB52" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO TEMPUS VALUES ("
DISPLAY " DATE '1993-08-24',"
DISPLAY " TIME '16:03:00',"
DISPLAY " TIMESTAMP '1993-08-24 16:03:00',"
DISPLAY " INTERVAL -'1-6' YEAR TO MONTH,"
DISPLAY " INTERVAL '13 0:10' DAY TO SECOND);"
* EXEC SQL INSERT INTO TEMPUS VALUES (
* DATE '1993-08-24',
* TIME '16:03:00',
* TIMESTAMP '1993-08-24 16:03:00',
* INTERVAL -'1-6' YEAR TO MONTH,
* INTERVAL '13 0:10' DAY TO SECOND);
CALL "SUB53" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "SELECT EXTRACT (DAY FROM TDATE)"
DISPLAY " INTO :int1 FROM TEMPUS;"
* EXEC SQL SELECT EXTRACT (DAY FROM TDATE)
* INTO :int1 FROM TEMPUS;
CALL "SUB54" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 24; its value is ", int1
if (int1 NOT = 24) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1 FROM TEMPUS"
DISPLAY " WHERE (TTIMESTAMP - TIMESTAMP '1995-02-24
- " 16:03:00')"
DISPLAY " YEAR TO MONTH = TINT1;"
* EXEC SQL SELECT COUNT(*) INTO :int1 FROM TEMPUS
* WHERE (TTIMESTAMP - TIMESTAMP '1995-02-24 16:03:00')
* YEAR TO MONTH = TINT1;
CALL "SUB55" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1 FROM TEMPUS"
DISPLAY " WHERE (TTIMESTAMP, TINT1) OVERLAPS"
DISPLAY " (TIMESTAMP '1995-02-24 16:03:00',
- " INTERVAL '1-6' YEAR TO MONTH);"
* EXEC SQL SELECT COUNT(*) INTO :int1 FROM TEMPUS
* WHERE (TTIMESTAMP, TINT1) OVERLAPS
* (TIMESTAMP '1995-02-24 16:03:00', INTERVAL '1-6'
* YEAR TO MONTH);
CALL "SUB56" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
if (int1 NOT = 0) then
MOVE 0 TO flag
END-IF
DISPLAY "ROLLBACK WORK;"
* EXEC SQL ROLLBACK WORK;
CALL "SUB57" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE TEMPUS CASCADE;"
* EXEC SQL DROP TABLE TEMPUS CASCADE;
CALL "SUB58" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB59" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0601','pass','MCO');
CALL "SUB60" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml106.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0601','fail','MCO');
CALL "SUB61" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB62" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0601 ********************
******************** BEGIN TEST0611 *******************
MOVE 1 TO flag
DISPLAY " TEST0611 "
DISPLAY " FIPS sizing, DATETIME data types (static)"
DISPLAY "References:"
DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL feature
- " 5"
DISPLAY " ANSI SQL-1992 6.1 SR.25-26"
DISPLAY " LR.1.a"
DISPLAY " 10.1 SR 3&4"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
*6.1 LR.1.a denies us the right to use <time precision> or
*<timestamp precision> in the declaration. SR.25 says that
*<time precision> defaults to 0 and <timestamp precision>
*defaults to 6.
DISPLAY "CREATE TABLE TSFIPS ("
DISPLAY " FIPS1 TIME,"
DISPLAY " FIPS2 TIMESTAMP,"
DISPLAY " FIPS3 INTERVAL YEAR (2) TO MONTH,"
DISPLAY " FIPS4 INTERVAL DAY (2) TO SECOND (6));"
* EXEC SQL CREATE TABLE TSFIPS (
* FIPS1 TIME,
* FIPS2 TIMESTAMP,
* FIPS3 INTERVAL YEAR (2) TO MONTH,
* FIPS4 INTERVAL DAY (2) TO SECOND (6));
CALL "SUB63" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB64" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO TSFIPS VALUES ("
DISPLAY " TIME '16:03:00',"
DISPLAY " TIMESTAMP '1996-08-24 16:03:00.999999',"
DISPLAY " INTERVAL -'99-6' YEAR (2) TO MONTH,"
DISPLAY " INTERVAL '99 0:10:00.999999' DAY (2) TO SECOND
- " (6));"
* EXEC SQL INSERT INTO TSFIPS VALUES (
* TIME '16:03:00',
* TIMESTAMP '1996-08-24 16:03:00.999999',
* INTERVAL -'99-6' YEAR (2) TO MONTH,
* INTERVAL '99 0:10:00.999999' DAY (2) TO SECOND (6))
* ;
CALL "SUB65" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "SELECT EXTRACT (SECOND FROM FIPS2)"
DISPLAY " * 1000000 - 999990 INTO :int1 FROM TSFIPS;"
* EXEC SQL SELECT EXTRACT (SECOND FROM FIPS2)
* * 1000000 - 999990 INTO :int1 FROM TSFIPS;
CALL "SUB66" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 9; its value is ", int1
if (int1 NOT = 9) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "SELECT EXTRACT (YEAR FROM FIPS3),"
DISPLAY " EXTRACT (MONTH FROM FIPS3) INTO :int1, :int2"
DISPLAY " FROM TSFIPS;"
* EXEC SQL SELECT EXTRACT (YEAR FROM FIPS3),
* EXTRACT (MONTH FROM FIPS3) INTO :int1, :int2
* FROM TSFIPS;
CALL "SUB67" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be -99; its value is ", int1
DISPLAY "int2 should be -6; its value is ", int2
DISPLAY "Note: The sign is specified by Subclause 6.6
- " GR.3.a.i"
DISPLAY " in ANSI SQL-1992."
if (int1 NOT = -99 OR int2 NOT = -6) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "SELECT EXTRACT (DAY FROM FIPS4),"
DISPLAY " EXTRACT (SECOND FROM FIPS4) * 1000000 - 999990"
DISPLAY " INTO :int1, :int2 FROM TSFIPS;"
* EXEC SQL SELECT EXTRACT (DAY FROM FIPS4),
* EXTRACT (SECOND FROM FIPS4) * 1000000 - 999990
* INTO :int1, :int2 FROM TSFIPS;
CALL "SUB68" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 99; its value is ", int1
DISPLAY "int2 should be 9; its value is ", int2
if (int1 NOT = 99 OR int2 NOT = 9) then
MOVE 0 TO flag
END-IF
DISPLAY "ROLLBACK WORK;"
* EXEC SQL ROLLBACK WORK;
CALL "SUB69" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE TSFIPS CASCADE;"
* EXEC SQL DROP TABLE TSFIPS CASCADE;
CALL "SUB70" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB71" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0611','pass','MCO');
CALL "SUB72" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml106.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0611','fail','MCO');
CALL "SUB73" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB74" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0611 ********************
******************** BEGIN TEST0613 *******************
MOVE 1 TO flag
DISPLAY " TEST0613 "
DISPLAY " (static)"
DISPLAY "References:"
DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL features
- " 5, 20"
DISPLAY " ANSI SQL-1992 6.8 "
DISPLAY " 6.8 GR.3"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
*Support for timezones is not included in Transitional SQL
DISPLAY "CREATE TABLE TSSMALL ("
DISPLAY " SMALLD DATE,"
DISPLAY " SMALLT TIME,"
DISPLAY " SMALLTS TIMESTAMP);"
* EXEC SQL CREATE TABLE TSSMALL (
* SMALLD DATE,
* SMALLT TIME,
* SMALLTS TIMESTAMP);
CALL "SUB75" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB76" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO TSSMALL VALUES ("
DISPLAY " CURRENT_DATE, CURRENT_TIME, "
DISPLAY "CURRENT_TIMESTAMP);"
* EXEC SQL INSERT INTO TSSMALL VALUES (
* CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP);
CALL "SUB77" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY "FROM TSSMALL WHERE"
DISPLAY "EXTRACT (YEAR FROM SMALLD) = EXTRACT (YEAR FROM
- " SMALLTS);"
COMPUTE int1 = -1
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM TSSMALL WHERE
* EXTRACT (YEAR FROM SMALLD) = EXTRACT (YEAR FROM SMALLTS)
* ;
CALL "SUB78" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY "FROM TSSMALL WHERE"
DISPLAY "EXTRACT (MONTH FROM SMALLD) = EXTRACT (MONTH FROM
- " SMALLTS);"
COMPUTE int1 = -1
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM TSSMALL WHERE
* EXTRACT (MONTH FROM SMALLD) = EXTRACT (MONTH FROM
* SMALLTS);
CALL "SUB79" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY "FROM TSSMALL WHERE"
DISPLAY "EXTRACT (DAY FROM SMALLD) = EXTRACT (DAY FROM
- " SMALLTS);"
COMPUTE int1 = -1
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM TSSMALL WHERE
* EXTRACT (DAY FROM SMALLD) = EXTRACT (DAY FROM SMALLTS)
* ;
CALL "SUB80" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY "FROM TSSMALL WHERE"
DISPLAY "EXTRACT (HOUR FROM SMALLT) = EXTRACT (HOUR FROM
- " SMALLTS);"
COMPUTE int1 = -1
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM TSSMALL WHERE
* EXTRACT (HOUR FROM SMALLT) = EXTRACT (HOUR FROM SMALLTS)
* ;
CALL "SUB81" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY "FROM TSSMALL WHERE"
DISPLAY "EXTRACT (MINUTE FROM SMALLT) = EXTRACT (MINUTE
- " FROM SMALLTS);"
COMPUTE int1 = -1
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM TSSMALL WHERE
* EXTRACT (MINUTE FROM SMALLT) = EXTRACT (MINUTE FROM
* SMALLTS);
CALL "SUB82" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
*Time and timestamp have different fractional seconds precision
*and we can't assume truncation or rounding.
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY "FROM TSSMALL WHERE"
DISPLAY "EXTRACT (SECOND FROM SMALLT) -"
DISPLAY "EXTRACT (SECOND FROM SMALLTS) > -1"
DISPLAY "AND EXTRACT (SECOND FROM SMALLT) -"
DISPLAY "EXTRACT (SECOND FROM SMALLTS) < 1;"
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM TSSMALL WHERE
* EXTRACT (SECOND FROM SMALLT) -
* EXTRACT (SECOND FROM SMALLTS) > -1
* AND EXTRACT (SECOND FROM SMALLT) -
* EXTRACT (SECOND FROM SMALLTS) < 1;
CALL "SUB83" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "ROLLBACK WORK;"
* EXEC SQL ROLLBACK WORK;
CALL "SUB84" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE TSSMALL CASCADE;"
* EXEC SQL DROP TABLE TSSMALL CASCADE;
CALL "SUB85" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB86" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0613','pass','MCO');
CALL "SUB87" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml106.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0613','fail','MCO');
CALL "SUB88" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB89" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0613 ********************
******************** BEGIN TEST0615 *******************
MOVE 1 TO flag
DISPLAY " TEST0615 "
DISPLAY " DATETIME-related SQLSTATE codes (static)"
DISPLAY "References:"
DISPLAY " FIPS PUB 127-2 14.1 Transitional SQL features
- " 5, 20"
DISPLAY " ANSI SQL-1992 22.1 SQLSTATE"
DISPLAY " 6.14 GR.3.c"
DISPLAY " 9.2 GR.3.m"
DISPLAY " COR1 for 6.10 GR.9.a.ii GR.10.a.ii GR.11.a.ii"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
*If this test is rejected at compile time for some reason which
*resembles the desired SQLSTATEs, you win.
*Datetime field overflow = 22008: add a one-year interval to
* YEAR 9999 datetime (6.14 GR.3.c)
*Interval field overflow = 22015: insert interval with too
* many digits in leading field (9.2 GR.3.m)
*Invalid datetime format = 22007: cast February 30 to datetime
* (COR1 for 6.10 GR 9.a.ii, 10.a.ii, 11.a.ii)
DISPLAY "CREATE TABLE TSERR ("
DISPLAY " BADINT INTERVAL YEAR (2) TO MONTH,"
DISPLAY " BADDATE DATE);"
* EXEC SQL CREATE TABLE TSERR (
* BADINT INTERVAL YEAR (2) TO MONTH,
* BADDATE DATE);
CALL "SUB90" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB91" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
* NOTICE
*The Standard is very clear on the fact that the YEAR
*field can't accept values below 1 or above 9999 in
*datetime items (see Table 10 and 6.14 GR.3.c).
*However, since it seems to us that a reasonable
*human being might want to implement YEAR with a
*small integer and permit the larger range to be used,
*you may replace the 9999 in the date literal below
*with as large an integer as you require to generate
*the specified error condition. This offer is null
*and void if the range limitation on YEAR is upheld by
*an official interpretation.
*DML106 TEd Hook #1
DISPLAY "INSERT INTO TSERR VALUES ("
DISPLAY " INTERVAL '0-11' YEAR TO MONTH,"
DISPLAY " DATE '9999-01-01' + INTERVAL '1-00' YEAR TO
- " MONTH);"
* EXEC SQL INSERT INTO TSERR VALUES (
* INTERVAL '0-11' YEAR TO MONTH,
* DATE '9999-01-01' + INTERVAL '1-00' YEAR TO MONTH)
* ;
CALL "SUB92" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
*DML106 TEd Hook #2
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
if (SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
DISPLAY "SQLSTATE should be 22008; its value is ", SQLSTATE
if (SQLSTATE NOT = "22008") then
MOVE 0 TO flag
END-IF
DISPLAY "INSERT INTO TSERR VALUES ("
DISPLAY " INTERVAL '9999-11' YEAR TO MONTH,"
DISPLAY " DATE '1984-01-01');"
* EXEC SQL INSERT INTO TSERR VALUES (
* INTERVAL '9999-11' YEAR TO MONTH,
* DATE '1984-01-01');
CALL "SUB93" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
*DML106 TEd Hook #3
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
if (SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
DISPLAY "SQLSTATE should be 22015; its value is ", SQLSTATE
if (SQLSTATE NOT = "22015") then
MOVE 0 TO flag
END-IF
DISPLAY "INSERT INTO TSERR VALUES ("
DISPLAY " INTERVAL '1-11' YEAR TO MONTH,"
DISPLAY " CAST ('DATE ''1993-02-30''' AS DATE));"
* EXEC SQL INSERT INTO TSERR VALUES (
* INTERVAL '1-11' YEAR TO MONTH,
* CAST ('DATE ''1993-02-30''' AS DATE));
CALL "SUB94" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
if (SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
DISPLAY "SQLSTATE should be 22007; its value is ", SQLSTATE
if (SQLSTATE NOT = "22007") then
MOVE 0 TO flag
END-IF
*The above could be passed for the wrong reason if the uglified
*syntax is not supported. Repeat with shorter syntax.
DISPLAY "INSERT INTO TSERR VALUES ("
DISPLAY " INTERVAL '1-11' YEAR TO MONTH,"
DISPLAY " CAST ('1993-02-30' AS DATE));"
* EXEC SQL INSERT INTO TSERR VALUES (
* INTERVAL '1-11' YEAR TO MONTH,
* CAST ('1993-02-30' AS DATE));
CALL "SUB95" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be < 0; its value is ", SQL-COD
if (SQLCODE NOT < 0) then
MOVE 0 TO flag
END-IF
DISPLAY "SQLSTATE should be 22007; its value is ", SQLSTATE
if (SQLSTATE NOT = "22007") then
MOVE 0 TO flag
END-IF
DISPLAY "ROLLBACK WORK;"
* EXEC SQL ROLLBACK WORK;
CALL "SUB96" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE TSERR CASCADE;"
* EXEC SQL DROP TABLE TSERR CASCADE;
CALL "SUB97" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB98" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0615','pass','MCO');
CALL "SUB99" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml106.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0615','fail','MCO');
CALL "SUB100" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB101" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0615 ********************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN.
* **** Procedures for PERFORM statements
*Test SQLCODE and SQLSTATE for normal completion.
CHCKOK.
DISPLAY "SQLCODE should be 0; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 00000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 0 OR NORMSQ NOT = "00000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "00000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
.
NOSUBCLASS.
*This routine replaces valid implementation-defined
*subclasses with 000. This replacement equates valid
*implementation-defined subclasses with the 000 value
*expected by the test case; otherwise the test will fail.
*After calling NOSUBCLASS, NORMSQ will be tested
* SQLSTATE will be printed.
MOVE SQLSTATE TO NORMSQ
MOVE 3 TO norm1
*subclass begins in position 3 of char array NORMSQ
*valid subclass begins with 5-9, I-Z, end of ALPNUM table
PERFORM VARYING norm2 FROM 14 BY 1 UNTIL norm2 > 36
if (NORMSQX(norm1) = ALPNUM(norm2)) then
MOVE "0" TO NORMSQX(norm1)
END-IF
END-PERFORM
*Quit if NORMSQ is unchanged. Subclass is not impl.-def.
*Changed NORMSQ means implementation-defined subclass,
*so proceed to zero it out, if valid (0-9,A-Z)
if (NORMSQ = SQLSTATE) then
GO TO EXIT-NOSUBCLASS
END-IF
MOVE 4 TO norm1
*examining position 4 of char array NORMSQ
*valid characters are 0-9, A-Z
PERFORM VARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36
if (NORMSQX(norm1) = ALPNUM(norm2)) then
MOVE "0" TO NORMSQX(norm1)
END-IF
END-PERFORM
MOVE 5 TO norm1
*valid characters are 0-9, A-Z
*examining position 5 of char array NORMSQ
PERFORM VARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36
if (NORMSQX(norm1) = ALPNUM(norm2)) then
MOVE "0" TO NORMSQX(norm1)
END-IF
END-PERFORM
*implementation-defined subclasses are allowed for warnings
*(class = 01). These equate to successful completion
*SQLSTATE values of 00000.
*Reference SQL-92 4.28 SQL-transactions, paragraph 2
if (NORMSQX(1) = "0" AND NORMSQX(2) = "1") then
MOVE "0" TO NORMSQX(2)
END-IF
.
EXIT-NOSUBCLASS.
EXIT.
[ Verzeichnis aufwärts0.38unsichere Verbindung
Übersetzung europäischer Sprachen durch Browser
]
|