* Standard COBOL (file "DML112.SCO") calling SQL * procedures in file "DML112.MCO".
**************************************************************** * * COMMENT SECTION * * DATE 1993/11/10 STANDARD COBOL LANGUAGE * NIST SQL VALIDATION TEST SUITE V6.0 * DISCLAIMER: * This program was written by employees of NIST to test SQL * implementations for conformance to the SQL standards. * NIST assumes no responsibility for any party's use of * this program. * * DML112.SCO * WRITTEN BY: David W. Flater * TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE * * This routine tests NULLs with DATETIME data types and in * outer joins, datetimes in a <default clause>, TRIM, and also * some schema manipulation statements. * This is the non-dynamic version of DML113.PC. * * REFERENCES * FIPS PUB 127-2 14.1 Transitional SQL * ANSI SQL-1992 * ****************************************************************
*Do this with an outer join in a combined test later. *For FSQL, use SELECT DISTINCT (all that stuff)
DISPLAY"CREATE VIEW INVENTORY AS" DISPLAY" SELECT MERCH.ITEMKEY AS ITEMKEY, ORDERED," DISPLAY" MWAIT, DWAIT FROM MERCH, TURNAROUND COR1 WHERE
- " RDATE" DISPLAY" IS NOT NULL AND SOLD IS NULL AND" DISPLAY" MERCH.ITEMKEY = COR1.ITEMKEY" DISPLAY" UNION" DISPLAY" SELECT ITEMKEY, ORDERED," DISPLAY" CAST (NULL AS INTERVAL MONTH)," DISPLAY" CAST (NULL AS INTERVAL DAY TO HOUR) FROM" DISPLAY" MERCH WHERE RDATE IS NOT NULL AND SOLD IS NULL" DISPLAY" AND MERCH.ITEMKEY NOT IN (SELECT ITEMKEY" DISPLAY" FROM TURNAROUND);"
* EXEC SQL CREATE VIEW INVENTORY AS * SELECT MERCH.ITEMKEY AS ITEMKEY, ORDERED, * MWAIT, DWAIT FROM MERCH, TURNAROUND COR1 WHERE RDATE * IS NOT NULL AND SOLD IS NULL AND * MERCH.ITEMKEY = COR1.ITEMKEY * UNION * SELECT ITEMKEY, ORDERED, * CAST (NULL AS INTERVAL MONTH), * CAST (NULL AS INTERVAL DAY TO HOUR) FROM * MERCH WHERE RDATE IS NOT NULL AND SOLD IS NULL * AND MERCH.ITEMKEY NOT IN (SELECT ITEMKEY * FROM TURNAROUND); CALL"SUB7"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
DISPLAY"SELECT COUNT(*) INTO :int1 FROM" DISPLAY" MERCH A, MERCH B WHERE A.SOLD = B.SOLD;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 FROM * MERCH A, MERCH B WHERE A.SOLD = B.SOLD; CALL"SUB16"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 1; its value is ", int1 if (int1 NOT = 1) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1 FROM" DISPLAY" MERCH A, MERCH B WHERE A.RTIME = B.RTIME;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 FROM * MERCH A, MERCH B WHERE A.RTIME = B.RTIME; CALL"SUB17"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1 FROM" DISPLAY" MERCH WHERE RDATE IS NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 FROM * MERCH WHERE RDATE IS NULL; CALL"SUB18"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1 FROM" DISPLAY" TURNAROUND WHERE DWAIT IS NOT NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 FROM * TURNAROUND WHERE DWAIT IS NOT NULL; CALL"SUB19"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 1; its value is ", int1 if (int1 NOT = 1) then MOVE 0 TO flag END-IF
DISPLAY"SELECT EXTRACT (DAY FROM RDATE) INTO :int1:indic1" DISPLAY" FROM MERCH, TURNAROUND WHERE MERCH.ITEMKEY =" DISPLAY" TURNAROUND.ITEMKEY;"
COMPUTE int1 = -1 MOVE 2 TO indic1 * EXEC SQL SELECT EXTRACT (DAY FROM RDATE) INTO :int1:indic1 * FROM MERCH, TURNAROUND WHERE MERCH.ITEMKEY = * TURNAROUND.ITEMKEY; CALL"SUB20"USING SQLCODE SQLSTATE int1 indic1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"indic1 should be -1; its value is ", indic1 if (indic1 NOT = -1) then MOVE 0 TO flag END-IF
DISPLAY"DECLARE C11211 CURSOR FOR" DISPLAY" SELECT ITEMKEY FROM MERCH WHERE SOLD IS NOT
- " NULL;"
* EXEC SQL DECLARE C11211 CURSOR FOR * SELECT ITEMKEY FROM MERCH WHERE SOLD IS NOT NULL END-EXEC
DISPLAY" "
DISPLAY"OPEN C11211;" * EXEC SQL OPEN C11211; CALL"SUB21"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"FETCH C11211 INTO :int1;" * EXEC SQL FETCH C11211 INTO :int1; CALL"SUB22"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF
*Cursor left open.
DISPLAY"DECLARE C11212 CURSOR FOR" DISPLAY" SELECT EXTRACT (HOUR FROM AVG (DWAIT))" DISPLAY" FROM MERCH, TURNAROUND WHERE" DISPLAY" MERCH.ITEMKEY = TURNAROUND.ITEMKEY OR" DISPLAY" TURNAROUND.ITEMKEY NOT IN" DISPLAY" (SELECT ITEMKEY FROM MERCH);"
* EXEC SQL DECLARE C11212 CURSOR FOR * SELECT EXTRACT (HOUR FROM AVG (DWAIT)) * FROM MERCH, TURNAROUND WHERE * MERCH.ITEMKEY = TURNAROUND.ITEMKEY OR * TURNAROUND.ITEMKEY NOT IN * (SELECT ITEMKEY FROM MERCH) END-EXEC
DISPLAY" "
DISPLAY"OPEN C11212;" * EXEC SQL OPEN C11212; CALL"SUB23"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
DISPLAY"SQLCODE should be >= 0; its value is ", SQL-COD if (SQLCODE < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE can be 00000 or 01003; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "00000"AND SQLSTATE NOT = "01003") then MOVE 0 TO flag END-IF
*DML083 set the precedent for requiring 01003 on the fetches. *One might argue that it ought to be returned just on the *open and never again. DML083 is under dispute, so status *codes are checked loosely here.
COMPUTE int1 = -1 DISPLAY"FETCH C11212 INTO :int1;" * EXEC SQL FETCH C11212 INTO :int1; CALL"SUB24"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
DISPLAY"SQLCODE should be >= 0; its value is ", SQL-COD if (SQLCODE < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE can be 00000 or 01003; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "00000"AND SQLSTATE NOT = "01003") then MOVE 0 TO flag END-IF DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM INVENTORY WHERE MWAIT IS NULL" DISPLAY" AND DWAIT IS NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM INVENTORY WHERE MWAIT IS NULL * AND DWAIT IS NULL; CALL"SUB25"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF
* EXEC SQL COMMIT WORK; CALL"SUB33"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD ******************** END TEST0621 ******************** ******************** BEGIN TEST0623 ******************* MOVE 1 TO flag
DISPLAY"INSERT INTO JNULL1 VALUES (NULL, NULL);" * EXEC SQL INSERT INTO JNULL1 VALUES (NULL, NULL); CALL"SUB46"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO JNULL1 VALUES (1, NULL);" * EXEC SQL INSERT INTO JNULL1 VALUES (1, NULL); CALL"SUB47"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO JNULL1 VALUES (NULL, 1);" * EXEC SQL INSERT INTO JNULL1 VALUES (NULL, 1); CALL"SUB48"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO JNULL1 VALUES (1, 1);" * EXEC SQL INSERT INTO JNULL1 VALUES (1, 1); CALL"SUB49"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO JNULL1 VALUES (2, 2);" * EXEC SQL INSERT INTO JNULL1 VALUES (2, 2); CALL"SUB50"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM JNULL3;" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL3; CALL"SUB51"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 5; its value is ", int1 if (int1 NOT = 5) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM JNULL3" DISPLAY" WHERE D2 IS NOT NULL OR D1 IS NOT NULL;" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL3 * WHERE D2 IS NOT NULL OR D1 IS NOT NULL; CALL"SUB52"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1 FROM JNULL5;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL5; CALL"SUB53"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1 FROM" DISPLAY" JNULL6" DISPLAY" WHERE C2 IS NOT NULL;"
* EXEC SQL SELECT COUNT(*) INTO :int1 FROM * JNULL6 * WHERE C2 IS NOT NULL; CALL"SUB54"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 3; its value is ", int1 if (int1 NOT = 3) then MOVE 0 TO flag END-IF
*Nonempty table
DISPLAY"INSERT INTO JNULL2" DISPLAY" SELECT * FROM JNULL1;"
* EXEC SQL INSERT INTO JNULL2 * SELECT * FROM JNULL1; CALL"SUB55"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"UPDATE JNULL2" DISPLAY" SET D2 = 1 WHERE D2 = 2;"
* EXEC SQL UPDATE JNULL2 * SET D2 = 1 WHERE D2 = 2; CALL"SUB56"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM JNULL3;" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL3; CALL"SUB57"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 9; its value is ", int1 if (int1 NOT = 9) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM JNULL3 WHERE C1 IS NULL;"
* EXEC SQL SELECT COUNT(*) INTO :int1 * FROM JNULL3 WHERE C1 IS NULL; CALL"SUB58"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 4; its value is ", int1 if (int1 NOT = 4) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM JNULL3 WHERE D1 IS NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM JNULL3 WHERE D1 IS NULL; CALL"SUB59"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 5; its value is ", int1 if (int1 NOT = 5) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM JNULL3 WHERE D2 IS NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM JNULL3 WHERE D2 IS NULL; CALL"SUB60"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 3; its value is ", int1 if (int1 NOT = 3) then MOVE 0 TO flag END-IF
DISPLAY"SELECT AVG(D1) * 10 INTO :int1" DISPLAY" FROM JNULL3;"
COMPUTE int1 = -1 * EXEC SQL SELECT AVG(D1) * 10 INTO :int1 * FROM JNULL3; CALL"SUB61"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
DISPLAY"SQLCODE should be >= 0; its value is ", SQL-COD if (SQLCODE < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE should be 01003; its value is ", SQLSTATE if (SQLSTATE NOT = "01003") then MOVE 0 TO flag END-IF DISPLAY"int1 should be 15; its value is ", int1 if (int1 NOT = 15) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM JNULL6" DISPLAY" WHERE C2 = 1;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM JNULL6 * WHERE C2 = 1; CALL"SUB62"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 6; its value is ", int1 if (int1 NOT = 6) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM JNULL6" DISPLAY" WHERE C2 IS NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM JNULL6 * WHERE C2 IS NULL; CALL"SUB63"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM JNULL6" DISPLAY" WHERE C2 = C1 AND" DISPLAY" D1 IS NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM JNULL6 * WHERE C2 = C1 AND * D1 IS NULL; CALL"SUB64"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF
* EXEC SQL COMMIT WORK; CALL"SUB72"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD ******************** END TEST0623 ******************** ******************** BEGIN TEST0625 ******************* MOVE 1 TO flag
*should not be able to drop CHANGG.NAAM RESTRICT due to 11.15 SR DISPLAY"ALTER TABLE CHANGG" DISPLAY" DROP NAAM RESTRICT;" * EXEC SQL ALTER TABLE CHANGG * DROP NAAM RESTRICT; CALL"SUB77"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE should be 42000; its value is ", SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
DISPLAY"INSERT INTO CHANGG VALUES ('RALPH',
- "22);" * EXEC SQL INSERT INTO CHANGG VALUES ('RALPH', * 22); CALL"SUB79"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO CHANGG VALUES ('RUDOLPH',
- "54);" * EXEC SQL INSERT INTO CHANGG VALUES ('RUDOLPH', * 54); CALL"SUB80"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO CHANGG VALUES ('QUEEG',
- "33);" * EXEC SQL INSERT INTO CHANGG VALUES ('QUEEG', * 33); CALL"SUB81"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO CHANGG VALUES ('BESSIE',
- "106);" * EXEC SQL INSERT INTO CHANGG VALUES ('BESSIE', * 106); CALL"SUB82"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
*This select should fail
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM CHANGG WHERE DIVORCES IS NULL;" * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM CHANGG WHERE DIVORCES IS NULL; CALL"SUB83"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
COMPUTE int1 = -1 DISPLAY"SELECT MAX(AGE) INTO :int1 FROM CHANGGVIEW;" * EXEC SQL SELECT MAX(AGE) INTO :int1 FROM CHANGGVIEW * ; CALL"SUB87"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 106; its value is ", int1 if (int1 NOT = 106) then MOVE 0 TO flag END-IF
*11.11 GR.2: This statement should fail.
DISPLAY"SELECT NUMBRR INTO :ch1 FROM CHANGGVIEW;" * EXEC SQL SELECT NUMBRR INTO :ch1 FROM CHANGGVIEW; CALL"SUB88"USING SQLCODE SQLSTATE ch1 MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM CHANGG WHERE NUMBRR IS NOT NULL" DISPLAY" OR DIVORCES <> 0;" COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM CHANGG WHERE NUMBRR IS NOT NULL * OR DIVORCES <> 0; CALL"SUB94"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
*Do some uncomplicated things
DISPLAY"UPDATE CHANGG" DISPLAY" SET NUMBRR = '837-47-1847', DIVORCES = 3" DISPLAY" WHERE NAAM = 'RUDOLPH';" * EXEC SQL UPDATE CHANGG * SET NUMBRR = '837-47-1847', DIVORCES = 3 * WHERE NAAM = 'RUDOLPH'; CALL"SUB95"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"UPDATE CHANGG" DISPLAY" SET NUMBRR = '738-47-1847', DIVORCES = NULL" DISPLAY" WHERE NAAM = 'QUEEG';" * EXEC SQL UPDATE CHANGG * SET NUMBRR = '738-47-1847', DIVORCES = NULL * WHERE NAAM = 'QUEEG'; CALL"SUB96"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DELETE FROM CHANGG" DISPLAY" WHERE NUMBRR IS NULL;" * EXEC SQL DELETE FROM CHANGG * WHERE NUMBRR IS NULL; CALL"SUB97"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
DISPLAY"INSERT INTO CHANGG" DISPLAY" VALUES ('OLIVIA', 20, '111-11-1111', 0);" * EXEC SQL INSERT INTO CHANGG * VALUES ('OLIVIA', 20, '111-11-1111', 0); CALL"SUB99"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 COMPUTE int2 = -1 MOVE"xxxxxxxxxxx"TO ch1 DISPLAY"SELECT AGE, NUMBRR, DIVORCES" DISPLAY" INTO :int1, :ch1, :int2" DISPLAY" FROM CHANGG" DISPLAY" WHERE NAAM = 'RUDOLPH';" * EXEC SQL SELECT AGE, NUMBRR, DIVORCES * INTO :int1, :ch1, :int2 * FROM CHANGG * WHERE NAAM = 'RUDOLPH'; CALL"SUB100"USING SQLCODE SQLSTATE int1 ch1 int2 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 54; its value is ", int1 DISPLAY"int2 should be 3; its value is ", int2 DISPLAY"ch1 should be '837-47-1847'; its value is '",
ch1 "'" if (int1 NOT = 54 OR int2 NOT = 3) then MOVE 0 TO flag END-IF if (ch1 NOT = "837-47-1847") then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 COMPUTE int2 = -1 MOVE 10 TO indic1 MOVE"xxxxxxxxxxx"TO ch1 DISPLAY"SELECT AGE, NUMBRR, DIVORCES" DISPLAY" INTO :int1, :ch1, :int2:indic1" DISPLAY" FROM CHANGG" DISPLAY" WHERE NAAM = 'QUEEG';" * EXEC SQL SELECT AGE, NUMBRR, DIVORCES * INTO :int1, :ch1, :int2:indic1 * FROM CHANGG * WHERE NAAM = 'QUEEG'; CALL"SUB101"USING SQLCODE SQLSTATE int1 ch1 int2 indic1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 33; its value is ", int1 DISPLAY"indic1 should be -1; its value is ", indic1 DISPLAY"ch1 should be '738-47-1847'; its value is '",
ch1 "'" if (int1 NOT = 33 OR indic1 NOT = -1) then MOVE 0 TO flag END-IF if (ch1 NOT = "738-47-1847") then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 COMPUTE int2 = -1 MOVE"xxxxxxxxxxx"TO ch1 DISPLAY"SELECT AGE, NUMBRR, DIVORCES" DISPLAY" INTO :int1, :ch1, :int2" DISPLAY" FROM CHANGG" DISPLAY" WHERE NAAM = 'GOOBER';" * EXEC SQL SELECT AGE, NUMBRR, DIVORCES * INTO :int1, :ch1, :int2 * FROM CHANGG * WHERE NAAM = 'GOOBER'; CALL"SUB102"USING SQLCODE SQLSTATE int1 ch1 int2 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 16; its value is ", int1 DISPLAY"int2 should be 0; its value is ", int2 DISPLAY"ch1 should be '000-10-0001'; its value is '",
ch1 "'" if (int1 NOT = 16 OR int2 NOT = 0) then MOVE 0 TO flag END-IF if (ch1 NOT = "000-10-0001") then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 COMPUTE int2 = -1 MOVE"xxxxxxxxxxx"TO ch1 DISPLAY"SELECT AGE, NUMBRR, DIVORCES" DISPLAY" INTO :int1, :ch1, :int2" DISPLAY" FROM CHANGG" DISPLAY" WHERE NAAM = 'OLIVIA';" * EXEC SQL SELECT AGE, NUMBRR, DIVORCES * INTO :int1, :ch1, :int2 * FROM CHANGG * WHERE NAAM = 'OLIVIA'; CALL"SUB103"USING SQLCODE SQLSTATE int1 ch1 int2 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 20; its value is ", int1 DISPLAY"int2 should be 0; its value is ", int2 DISPLAY"ch1 should be '111-11-1111'; its value is '",
ch1 "'" if (int1 NOT = 20 OR int2 NOT = 0) then MOVE 0 TO flag END-IF if (ch1 NOT = "111-11-1111") then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM CHANGG;" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM CHANGG; CALL"SUB104"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 4; its value is ", int1 if (int1 NOT = 4) then MOVE 0 TO flag END-IF
DISPLAY"ALTER TABLE CHANGG DROP AGE CASCADE;" * EXEC SQL ALTER TABLE CHANGG DROP AGE CASCADE * ; CALL"SUB106"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM CHANGG WHERE AGE > 30;" * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM CHANGG WHERE AGE > 30; CALL"SUB110"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
*This select should fail too
MOVE"xxxxx"TO SQLSTATE DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM CHANGG WHERE DIVORCES IS NULL;" * EXEC SQL SELECT COUNT(*) INTO :int1 * FROM CHANGG WHERE DIVORCES IS NULL; CALL"SUB111"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
MOVE"xxxxxxxxxxxxxx"TO ch2 DISPLAY"SELECT NAAM INTO :ch2" DISPLAY" FROM CHANGG" DISPLAY" WHERE NUMBRR LIKE '%000%';" * EXEC SQL SELECT NAAM INTO :ch2 * FROM CHANGG * WHERE NUMBRR LIKE '%000%'; CALL"SUB112"USING SQLCODE SQLSTATE ch2 MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch2 should be 'GOOBER '; its value is '",
ch2 "'" if (ch2 NOT = "GOOBER ") then MOVE 0 TO flag END-IF
*verify referential constraint DISPLAY"INSERT INTO REFERENCE_CHANGG VALUES
- "('NO SUCH NAAM');" * EXEC SQL INSERT INTO REFERENCE_CHANGG VALUES * ('NO SUCH NAAM'); CALL"SUB116"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE should be 23000; its value is ", SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "23000") then MOVE 0 TO flag END-IF if (NORMSQ = "23000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
*should not be able to drop CHANGG.NAAM RESTRICT due to RI const DISPLAY"ALTER TABLE CHANGG" DISPLAY" DROP NAAM RESTRICT;" * EXEC SQL ALTER TABLE CHANGG * DROP NAAM RESTRICT; CALL"SUB118"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE should be 42000; its value is ", SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
*should be able to drop CHANGG.NAAM CASCADE DISPLAY"ALTER TABLE CHANGG" DISPLAY" DROP NAAM CASCADE;" * EXEC SQL ALTER TABLE CHANGG * DROP NAAM CASCADE; CALL"SUB120"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
*verify referential constraint was a dropped object DISPLAY"INSERT INTO REFERENCE_CHANGG VALUES
- "('NO SUCH NAAM');" * EXEC SQL INSERT INTO REFERENCE_CHANGG VALUES * ('NO SUCH NAAM'); CALL"SUB122"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
*TEd Hook #1 Check 11.15 SR.3 (can't drop all the columns) *This is a syntax error. If it is rejected at compile time, *save the error and use the TEd hooks to remove this subtest. DISPLAY"ALTER TABLE CHANGG" DISPLAY" DROP NUMBRR RESTRICT;" * EXEC SQL ALTER TABLE CHANGG * DROP NUMBRR RESTRICT; CALL"SUB124"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE should be 42000; its value is ", SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
* EXEC SQL COMMIT WORK; CALL"SUB132"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD ******************** END TEST0625 ******************** ******************** BEGIN TEST0631 ******************* MOVE 1 TO flag
DISPLAY"CREATE TABLE OBITUARIES (" DISPLAY" NAAM CHAR (14) NOT NULL PRIMARY KEY," DISPLAY" BORN DATE DEFAULT DATE '1880-01-01'," DISPLAY" DIED DATE DEFAULT CURRENT_DATE," DISPLAY" ENTERED TIMESTAMP DEFAULT CURRENT_TIMESTAMP);"
* EXEC SQL CREATE TABLE OBITUARIES ( * NAAM CHAR (14) NOT NULL PRIMARY KEY, * BORN DATE DEFAULT DATE '1880-01-01', * DIED DATE DEFAULT CURRENT_DATE, * ENTERED TIMESTAMP DEFAULT CURRENT_TIMESTAMP, * TESTING1 DATE, * TESTING2 TIMESTAMP); CALL"SUB133"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
DISPLAY"INSERT INTO BIRTHS (NAAM, TESTING)" DISPLAY" VALUES ('BJORN', CURRENT_TIME);" * EXEC SQL INSERT INTO BIRTHS (NAAM, TESTING) * VALUES ('BJORN', CURRENT_TIME); CALL"SUB138"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"SELECT EXTRACT (HOUR FROM CHECKIN) +" DISPLAY" EXTRACT (MINUTE FROM CHECKIN) +" DISPLAY" EXTRACT (SECOND FROM CHECKIN)" DISPLAY" INTO :int1 FROM BIRTHS;"
COMPUTE int1 = -1 * EXEC SQL SELECT EXTRACT (HOUR FROM CHECKIN) + * EXTRACT (MINUTE FROM CHECKIN) + * EXTRACT (SECOND FROM CHECKIN) * INTO :int1 FROM BIRTHS; CALL"SUB139"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
DISPLAY"SELECT EXTRACT (HOUR FROM LABOR) INTO :int1 FROM
- " BIRTHS;" COMPUTE int1 = -1 * EXEC SQL SELECT EXTRACT (HOUR FROM LABOR) INTO :int1 FROM * BIRTHS; CALL"SUB140"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 4; its value is ", int1 if (int1 NOT = 4) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT (*) INTO :int1 FROM BIRTHS" DISPLAY" WHERE TESTING <> CHECKOUT OR CHECKOUT IS NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT (*) INTO :int1 FROM BIRTHS * WHERE TESTING <> CHECKOUT OR CHECKOUT IS NULL; CALL"SUB141"USING SQLCODE SQLSTATE int1 MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT (*) INTO :int1 FROM OBITUARIES" DISPLAY" WHERE BORN <> DATE '1880-01-01'" DISPLAY" OR BORN IS NULL" DISPLAY" OR DIED <> TESTING1" DISPLAY" OR DIED IS NULL" DISPLAY" OR ENTERED <> TESTING2" DISPLAY" OR ENTERED IS NULL;"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT (*) INTO :int1 FROM OBITUARIES * WHERE BORN <> DATE '1880-01-01' * OR BORN IS NULL * OR DIED <> TESTING1 * OR DIED IS NULL * OR ENTERED <> TESTING2 * OR ENTERED IS NULL; CALL"SUB142"USING SQLCODE SQLSTATE int1
--> --------------------
--> maximum size reached
--> --------------------
¤ 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.47Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.