* 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"USINGSQLCODE SQLSTATE MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 indic1 MOVESQLCODETO 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
COMPUTE int1 = -1 DISPLAY"FETCH C11211 INTO :int1;" * EXEC SQL FETCH C11211 INTO :int1; CALL"SUB22"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"INSERT INTO JNULL1 VALUES (NULL, NULL);" * EXEC SQL INSERT INTO JNULL1 VALUES (NULL, NULL); CALL"SUB46"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO JNULL1 VALUES (1, NULL);" * EXEC SQL INSERT INTO JNULL1 VALUES (1, NULL); CALL"SUB47"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO JNULL1 VALUES (NULL, 1);" * EXEC SQL INSERT INTO JNULL1 VALUES (NULL, 1); CALL"SUB48"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO JNULL1 VALUES (1, 1);" * EXEC SQL INSERT INTO JNULL1 VALUES (1, 1); CALL"SUB49"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO JNULL1 VALUES (2, 2);" * EXEC SQL INSERT INTO JNULL1 VALUES (2, 2); CALL"SUB50"USINGSQLCODE SQLSTATE MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM JNULL3;" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM JNULL3; CALL"SUB57"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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;"
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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF
*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"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODENOT < 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"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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" if (SQLCODENOT < 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE ch1 MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" if (SQLCODENOT < 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
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"USINGSQLCODE SQLSTATE int1 ch1 int2 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 ch1 int2 indic1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 ch1 int2 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 ch1 int2 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" if (SQLCODENOT < 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" if (SQLCODENOT < 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"USINGSQLCODE SQLSTATE ch2 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODENOT < 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"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODENOT < 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"USINGSQLCODE SQLSTATE MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO 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"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODENOT < 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"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"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"INSERT INTO WEIRDPAD (NAAM, SPONSOR) VALUES" DISPLAY" (' KEITH ', 'XXXXKATEXXXXXX');" * EXEC SQL INSERT INTO WEIRDPAD (NAAM, SPONSOR) VALUES * (' KEITH ', 'XXXXKATEXXXXXX'); CALL"SUB154"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
MOVE"BLAHBLAHBLAHBL"TO ch2 DISPLAY"SELECT TRIM ('X' FROM SPONSOR) INTO :ch2" DISPLAY" FROM WEIRDPAD" DISPLAY" WHERE TRIM (NAAM) = 'KEITH';"
* EXEC SQL SELECT TRIM ('X' FROM SPONSOR) INTO :ch2 * FROM WEIRDPAD * WHERE TRIM (NAAM) = 'KEITH'; CALL"SUB155"USINGSQLCODE SQLSTATE ch2 MOVESQLCODETO 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
*repeat with CURSOR MOVE"BLAHBLAHBLAHBL"TO ch2 DISPLAY"DECLARE WWW CURSOR FOR " DISPLAY"SELECT TRIM ('X' FROM SPONSOR)" DISPLAY" FROM WEIRDPAD" DISPLAY" WHERE TRIM (NAAM) = 'KEITH';"
* EXEC SQL DECLARE WWW CURSOR FOR * SELECT TRIM ('X' FROM SPONSOR) * FROM WEIRDPAD * WHERE TRIM (NAAM) = 'KEITH' END-EXEC
DISPLAY"FETCH WWW INTO :ch2;" * EXEC SQL FETCH WWW INTO :ch2; CALL"SUB157"USINGSQLCODE SQLSTATE ch2 MOVESQLCODETO 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
MOVE"BLAHBLAHBLAHBL"TO ch2 DISPLAY"SELECT TRIM (LEADING 'X' FROM SPONSOR) INTO :ch2" DISPLAY" FROM WEIRDPAD" DISPLAY" WHERE TRIM (TRAILING FROM NAAM) = ' KEITH';"
* EXEC SQL SELECT TRIM (LEADING 'X' FROM SPONSOR) INTO :ch2 * FROM WEIRDPAD * WHERE TRIM (TRAILING FROM NAAM) = ' KEITH'; CALL"SUB158"USINGSQLCODE SQLSTATE ch2 MOVESQLCODETO 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
MOVE"BLAHBLAHBLAHBL"TO ch2 DISPLAY"SELECT TRIM (LEADING 'X' FROM SPONSOR) INTO :ch2" DISPLAY" FROM WEIRDPAD" DISPLAY" WHERE TRIM (TRAILING 'X' FROM SPONSOR) =
- " 'XXXXKATE';"
* EXEC SQL SELECT TRIM (LEADING 'X' FROM SPONSOR) INTO :ch2 * FROM WEIRDPAD * WHERE TRIM (TRAILING 'X' FROM SPONSOR) = 'XXXXKATE' * ; CALL"SUB159"USINGSQLCODE SQLSTATE ch2 MOVESQLCODETO 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"SELECT TRIM (LEADING FROM B.NAAM) INTO :ch10 FROM
- " WEIRDPAD A," DISPLAY" WEIRDPAD B WHERE TRIM (BOTH 'B' FROM A.NAAM)" DISPLAY" = TRIM (BOTH 'X' FROM B.SPONSOR);"
MOVE"BLAHBLAHBL"TO ch10 * EXEC SQL SELECT TRIM (LEADING FROM B.NAAM) INTO :ch10 FROM * WEIRDPAD A, * WEIRDPAD B WHERE TRIM (BOTH 'B' FROM A.NAAM) * = TRIM (BOTH 'X' FROM B.SPONSOR); CALL"SUB160"USINGSQLCODE SQLSTATE ch10 MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be 'KEITH '; its value is ", ch10 if (ch10 NOT = "KEITH ") then MOVE 0 TO flag END-IF
DISPLAY"SELECT TRIM (LEADING FROM B.NAAM)" DISPLAY" INTO :ch9 :indic1 FROM WEIRDPAD A," DISPLAY" WEIRDPAD B WHERE TRIM (BOTH 'B' FROM A.NAAM)" DISPLAY" = TRIM (BOTH 'X' FROM B.SPONSOR);"
MOVE"BLAHBLAHB"TO ch9 * EXEC SQL SELECT TRIM (LEADING FROM B.NAAM) INTO :ch9 * :indic1 FROM WEIRDPAD A, * WEIRDPAD B WHERE TRIM (BOTH 'B' FROM A.NAAM) * = TRIM (BOTH 'X' FROM B.SPONSOR); CALL"SUB161"USINGSQLCODE SQLSTATE ch9 indic1 MOVESQLCODETO SQL-COD
DISPLAY"SQLSTATE should be '01004'; its value is ",
SQLSTATE if (SQLSTATE NOT = "01004") then MOVE 0 TO flag END-IF DISPLAY"indic1 should be 10; its value is ", indic1 if (indic1 NOT = 10) then MOVE 0 TO flag END-IF DISPLAY"ch9 should be 'KEITH '; its value is ", ch9 if (ch9 NOT = "KEITH ") then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD A," DISPLAY" WEIRDPAD B WHERE TRIM (LEADING '0' FROM
- " A.SPONSOR)" DISPLAY" = TRIM (' ' FROM B.NAAM);"
COMPUTE int1 = -1 * EXEC SQL SELECT COUNT(*) INTO :int1 FROM WEIRDPAD A, * WEIRDPAD B WHERE TRIM (LEADING '0' FROM A.SPONSOR) * = TRIM (' ' FROM B.NAAM); CALL"SUB162"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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 TRIM ('BB' FROM NAAM)" DISPLAY" INTO :ch2 FROM WEIRDPAD WHERE NAAM LIKE
- " 'KATE%';" * EXEC SQL SELECT TRIM ('BB' FROM NAAM) * INTO :ch2 FROM WEIRDPAD WHERE NAAM LIKE 'KATE%'; CALL"SUB163"USINGSQLCODE SQLSTATE ch2 MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be 22027; its value is ", SQLSTATE if (SQLCODENOT < 0 OR SQLSTATE NOT = "22027") then MOVE 0 TO flag END-IF
*TEd Hook #3 this may cause legitimate compilation error MOVE"BB"TO ch3 DISPLAY"SELECT TRIM (:ch3 FROM NAAM)" DISPLAY" INTO :ch2 FROM WEIRDPAD WHERE NAAM LIKE
- " 'KATE%';" * EXEC SQL SELECT TRIM (:ch3 FROM NAAM) * INTO :ch2 FROM WEIRDPAD WHERE NAAM LIKE 'KATE%'; CALL"SUB164"USINGSQLCODE SQLSTATE ch3 ch2 MOVESQLCODETO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be 22027; its value is ", SQLSTATE if (SQLCODENOT < 0 OR SQLSTATE NOT = "22027") then MOVE 0 TO flag END-IF *TEd Hook #4
DISPLAY"INSERT INTO WEIRDPAD (NAAM, SPONSOR)" DISPLAY" SELECT DISTINCT TRIM (LEADING 'D' FROM
- " HU.STAFF.CITY)," DISPLAY" TRIM (TRAILING 'n' FROM PTYPE)" DISPLAY" FROM HU.STAFF, HU.PROJ " DISPLAY" WHERE EMPNAME = 'Alice';" * EXEC SQL INSERT INTO WEIRDPAD (NAAM, SPONSOR) * SELECT DISTINCT TRIM (LEADING 'D' FROM HU.STAFF.CITY), * TRIM (TRAILING 'n' FROM PTYPE) * FROM HU.STAFF, HU.PROJ * WHERE EMPNAME = 'Alice'; CALL"SUB165"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD;" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM WEIRDPAD; CALL"SUB166"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 5; its value is ", int1 if (int1 NOT = 5) then MOVE 0 TO flag END-IF
MOVE"X"TO chx DISPLAY"UPDATE WEIRDPAD" DISPLAY" SET SPONSOR = TRIM (:chx FROM SPONSOR)," DISPLAY" NAAM = TRIM ('B' FROM NAAM);" * EXEC SQL UPDATE WEIRDPAD * SET SPONSOR = TRIM (:chx FROM SPONSOR), * NAAM = TRIM ('B' FROM NAAM); CALL"SUB167"USINGSQLCODE SQLSTATE chx MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD" DISPLAY" WHERE NAAM = 'KATE' OR SPONSOR = 'KATE';" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM WEIRDPAD * WHERE NAAM = 'KATE' OR SPONSOR = 'KATE'; CALL"SUB168"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF
MOVE"Kest"TO ch2 DISPLAY"DELETE FROM WEIRDPAD WHERE" DISPLAY" TRIM(LEADING 'K' FROM :ch2) = TRIM('T' FROM
- " SPONSOR);" * EXEC SQL DELETE FROM WEIRDPAD WHERE * TRIM(LEADING 'K' FROM :ch2) = TRIM('T' FROM SPONSOR) * ; CALL"SUB169"USINGSQLCODE SQLSTATE ch2 MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD;" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM WEIRDPAD; CALL"SUB170"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO 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"UPDATE WEIRDPAD" DISPLAY" SET PADCHAR = '0'" DISPLAY" WHERE SPONSOR = '000000000KEITH'" DISPLAY" OR NAAM = 'eale';" * EXEC SQL UPDATE WEIRDPAD * SET PADCHAR = '0' * WHERE SPONSOR = '000000000KEITH' * OR NAAM = 'eale'; CALL"SUB171"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"UPDATE WEIRDPAD" DISPLAY" SET SPONSOR = NULL" DISPLAY" WHERE SPONSOR = 'Desig';" * EXEC SQL UPDATE WEIRDPAD * SET SPONSOR = NULL * WHERE SPONSOR = 'Desig'; CALL"SUB172"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD" DISPLAY" WHERE TRIM (PADCHAR FROM SPONSOR) IS NULL;" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM WEIRDPAD * WHERE TRIM (PADCHAR FROM SPONSOR) IS NULL; CALL"SUB173"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 2; its value is ", int1 if (int1 NOT = 2) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD" DISPLAY" WHERE TRIM (PADCHAR FROM SPONSOR) = 'KEITH';" * EXEC SQL SELECT COUNT(*) INTO :int1 FROM WEIRDPAD * WHERE TRIM (PADCHAR FROM SPONSOR) = 'KEITH'; CALL"SUB174"USINGSQLCODE SQLSTATE int1 MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 1; its value is ", int1 if (int1 NOT = 1) then MOVE 0 TO flag END-IF
* EXEC SQL COMMIT WORK; CALL"SUB180"USINGSQLCODE SQLSTATE MOVESQLCODETO SQL-COD ******************** END TEST0633 ******************** **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** 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 (SQLCODENOT = 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 PERFORMVARYING 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 GOTO EXIT-NOSUBCLASS END-IF
MOVE 4 TO norm1 *examining position 4 of char array NORMSQ *valid characters are 0-9, A-Z PERFORMVARYING 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 PERFORMVARYING 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
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.39Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-05-01)
¤
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.