**************************************************************** * * COMMENT SECTION * * DATE 1993/11/10 EMBEDDED 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.PCO * WRITTEN BY: David W. Flater * TRANSLATED AUTOMATICALLY FROM EMBEDDED C 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 * ****************************************************************
MOVE"FLATER "TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx EXECSQLSELECT USER INTO :uidx FROM HU.ECCO END-EXEC MOVESQLCODETO SQL-COD EXECSQLROLLBACK WORK END-EXEC MOVESQLCODETO SQL-COD if (uid NOT = uidx) then DISPLAY"ERROR: User ", uid " expected. User ", uidx "
- " connected" STOPRUN END-IF MOVE 0 TO errcnt
DISPLAY "SQL Test Suite, V6.0, Embedded COBOL, dml112.pco" DISPLAY "59-byte ID" DISPLAY"TEd Version #" *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
******************** BEGIN TEST0621 ******************* MOVE 1 TO flag
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
*Do this with an outer join in a combined test later. *For FSQL, use SELECT DISTINCT (all that stuff)
DISPLAY"CREATE VIEW INVENTORY AS" DISPLAY" SELECT MERCH.ITEMKEY AS ITEMKEY, ORDERED," DISPLAY" MWAIT, DWAIT FROM MERCH, TURNAROUND COR1 WHERE
- " RDATE" DISPLAY" IS NOT NULL AND SOLD IS NULL AND" DISPLAY" MERCH.ITEMKEY = COR1.ITEMKEY" DISPLAY" UNION" DISPLAY" SELECT ITEMKEY, ORDERED," DISPLAY" CAST (NULL AS INTERVAL MONTH)," DISPLAY" CAST (NULL AS INTERVAL DAY TO HOUR) FROM" DISPLAY" MERCH WHERE RDATE IS NOT NULL AND SOLD IS NULL" DISPLAY" AND MERCH.ITEMKEY NOT IN (SELECT ITEMKEY" DISPLAY" FROM TURNAROUND);"
EXECSQL CREATE VIEW INVENTORY AS SELECT MERCH.ITEMKEY AS ITEMKEY, ORDERED,
MWAIT, DWAIT FROM MERCH, TURNAROUND COR1 WHERE RDATE ISNOTNULLAND SOLD ISNULLAND
MERCH.ITEMKEY = COR1.ITEMKEY
UNION SELECT ITEMKEY, ORDERED,
CAST (NULL2 AS DATE),
CAST (NULL2 AS DATE) FROM
MERCH WHERE RDATE ISNOTNULLAND SOLD ISNULL AND MERCH.ITEMKEY NOTIN (SELECT ITEMKEY FROM TURNAROUND) END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
*Something ordered but not received
DISPLAY"INSERT INTO MERCH VALUES (" DISPLAY" 0, DATE '1993-11-23'," DISPLAY" NULL, NULL, NULL);"
COMPUTE int1 = -1 DISPLAY"FETCH C11211 INTO :int1;" EXECSQL FETCH C11211 INTO :int1 END-EXEC 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);"
EXECSQL DECLARE C11212 CURSOR FOR SELECT AVG (DWAIT) FROM MERCH, TURNAROUND WHERE
MERCH.ITEMKEY = TURNAROUND.ITEMKEY OR
TURNAROUND.ITEMKEY NOTIN
(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;" EXECSQL FETCH C11212 INTO :int1 END-EXEC 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 EXECSQLSELECTCOUNT(*) INTO :int1 FROM INVENTORY WHERE MWAIT ISNULL AND DWAIT ISNULLEND-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD ******************** END TEST0621 ******************** ******************** BEGIN TEST0623 ******************* MOVE 1 TO flag
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM JNULL3;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL3 END-EXEC 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;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL3 WHERE D2 ISNOTNULLOR D1 ISNOTNULLEND-EXEC 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 EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL5 END-EXEC 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;"
EXECSQLSELECTCOUNT(*) INTO :int1 FROM
JNULL6 WHERE C2 ISNOTNULLEND-EXEC 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;"
EXECSQLINSERTINTO JNULL2 SELECT * FROM JNULL1 END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"UPDATE JNULL2" DISPLAY" SET D2 = 1 WHERE D2 = 2;"
EXECSQL UPDATE JNULL2 SET D2 = 1 WHERE D2 = 2 END-EXEC MOVESQLCODETO SQL-COD
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM JNULL3;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL3 END-EXEC 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;"
EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL3 WHERE C1 ISNULLEND-EXEC 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 EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL3 WHERE D1 ISNULLEND-EXEC 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 EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL3 WHERE D2 ISNULLEND-EXEC 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;"
COMPUTE int1 = -1 EXECSQLSELECT AVG(D1) * 10 INTO :int1 FROM JNULL3 END-EXEC 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 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 EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL6 WHERE C2 = 1 END-EXEC 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 EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL6 WHERE C2 ISNULLEND-EXEC 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 EXECSQLSELECTCOUNT(*) INTO :int1 FROM JNULL6 WHERE C2 = C1 AND
D1 ISNULLEND-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO 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;" EXECSQLALTER TABLE CHANGG
DROP CONSTRAINT NAAM END-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD DISPLAY" "
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM CHANGG WHERE DIVORCES IS NULL;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM CHANGG WHERE DIVORCES ISNULLEND-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
COMPUTE int1 = -1 DISPLAY"SELECT MAX(AGE) INTO :int1 FROM CHANGGVIEW;" EXECSQLSELECT MAX(AGE2) INTO :int1 FROM CHANGGVIEW END-EXEC 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;" EXECSQLSELECT NUMBRR INTO :ch1 FROM CHANGGVIEW END-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
*Check that defaults are correct
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM CHANGG WHERE NUMBRR IS NOT NULL" DISPLAY" OR DIVORCES <> 0;" COMPUTE int1 = -1 EXECSQLSELECTCOUNT(*) INTO :int1 FROM CHANGG WHERE NUMBRR ISNOTNULL OR DIVORCES <> 0 END-EXEC 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';" EXECSQL UPDATE CHANGG SET NUMBRR = '837-47-1847', DIVORCES = 3 WHERE NAAM = 'RUDOLPH'END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"UPDATE CHANGG" DISPLAY" SET NUMBRR = '738-47-1847', DIVORCES = NULL" DISPLAY" WHERE NAAM = 'QUEEG';" EXECSQL UPDATE CHANGG SET NUMBRR = '738-47-1847', DIVORCES = NULL WHERE NAAM = 'QUEEG'END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DELETE FROM CHANGG" DISPLAY" WHERE NUMBRR IS NULL;" EXECSQLDELETEFROM CHANGG WHERE NUMBRR ISNULLEND-EXEC 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';" EXECSQLSELECT AGE, NUMBRR, DIVORCES INTO :int1, :ch1, :int2 FROM CHANGG WHERE NAAM = 'RUDOLPH'END-EXEC 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';" EXECSQLSELECT AGE, NUMBRR, DIVORCES INTO :int1, :ch1, :int2:indic1 FROM CHANGG WHERE NAAM = 'QUEEG'END-EXEC 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';" EXECSQLSELECT AGE, NUMBRR, DIVORCES INTO :int1, :ch1, :int2 FROM CHANGG WHERE NAAM = 'GOOBER'END-EXEC 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';" EXECSQLSELECT AGE, NUMBRR, DIVORCES INTO :int1, :ch1, :int2 FROM CHANGG WHERE NAAM = 'OLIVIA'END-EXEC 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;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM CHANGG END-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
*Age is nobody's business!
DISPLAY"ALTER TABLE CHANGG DROP AGE CASCADE;" EXECSQLALTER TABLE CHANGG DROP CONSTRAINT AGE END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
*Optional keyword!
DISPLAY"ALTER TABLE CHANGG DROP COLUMN DIVORCES RESTRICT;" EXECSQLALTER TABLE CHANGG DROP CONSTRAINT DIVORCES END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
*This select should fail
DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM CHANGG WHERE AGE > 30;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM CHANGG WHERE AGE > 30 END-EXEC 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;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM CHANGG WHERE DIVORCES ISNULLEND-EXEC 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%';" EXECSQLSELECT NAAM INTO :ch2 FROM CHANGG WHERE NUMBRR LIKE '%000%'END-EXEC 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
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
*verify referential constraint DISPLAY"INSERT INTO REFERENCE_CHANGG VALUES
- "('NO SUCH NAAM');" EXECSQLINSERTINTO REFERENCE_CHANGG VALUES
('NO SUCH NAAM') END-EXEC 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
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
*should not be able to drop CHANGG.NAAM RESTRICT due to RI const DISPLAY"ALTER TABLE CHANGG" DISPLAY" DROP NAAM RESTRICT;" EXECSQLALTER TABLE CHANGG
DROP CONSTRAINT NAAM END-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
DISPLAY" "
*should be able to drop CHANGG.NAAM CASCADE DISPLAY"ALTER TABLE CHANGG" DISPLAY" DROP NAAM CASCADE;" EXECSQLALTER TABLE CHANGG
DROP constraint NAAM END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
*verify referential constraint was a dropped object DISPLAY"INSERT INTO REFERENCE_CHANGG VALUES
- "('NO SUCH NAAM');" EXECSQLINSERTINTO REFERENCE_CHANGG VALUES
('NO SUCH NAAM') END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
*TEd Hook #1 Check 11.15 SR.3 (can't drop all the columns) *This is a syntax error. If it is rejected at compile time, *save the error and use the TEd hooks to remove this subtest. DISPLAY"ALTER TABLE CHANGG" DISPLAY" DROP NUMBRR RESTRICT;" EXECSQLALTER TABLE CHANGG
DROP constraint NUMBRR END-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD DISPLAY" "
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO 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);"
EXECSQL CREATE TABLE OBITUARIES (
NAAM CHAR (14) NOTNULL PRIMARY KEY,
BORN DATE DEFAULT '1880-01-01',
DIED DATE DEFAULT CURRENT_DATE,
ENTERED TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
TESTING1 DATE,
TESTING2 TIMESTAMP) END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"CREATE TABLE BIRTHS (" DISPLAY" NAAM CHAR (14) NOT NULL PRIMARY KEY," DISPLAY" CHECKIN TIME (0)" DISPLAY" DEFAULT TIME '00:00:00'," DISPLAY" LABOR INTERVAL HOUR" DISPLAY" DEFAULT INTERVAL '4' HOUR," DISPLAY" CHECKOUT TIME" DISPLAY" DEFAULT CURRENT_TIME);"
EXECSQL CREATE TABLE BIRTHS (
NAAM CHAR (14) NOTNULL PRIMARY KEY,
CHECKIN TIME
DEFAULT '00:00:00',
LABOR TIME
DEFAULT '4' HOUR,
CHECKOUT TIME
DEFAULT CURRENT_TIME,
TESTING TIME) END-EXEC MOVESQLCODETO SQL-COD
*The <default option> must be a <literal> or a <datetime value *function> so I can't use a CAST to change CURRENT_TIME to have *no fractional seconds.
PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC 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 EXECSQLSELECT CHECKIN +
CHECKIN +
CHECKIN INTO :int1 FROM BIRTHS END-EXEC 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 EXECSQLSELECT LABOR INTO :int1 FROM
BIRTHS END-EXEC 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 EXECSQLSELECTCOUNT (*) INTO :int1 FROM BIRTHS WHERE TESTING <> CHECKOUT OR CHECKOUT ISNULLEND-EXEC 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 EXECSQLSELECTCOUNT (*) INTO :int1 FROM OBITUARIES WHERE BORN <> '1880-01-01' OR BORN ISNULL OR DIED <> TESTING1 OR DIED ISNULL OR ENTERED <> TESTING2 OR ENTERED ISNULLEND-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD ******************** END TEST0631 ******************** ******************** BEGIN TEST0633 ******************* MOVE 1 TO flag
DISPLAY"INSERT INTO WEIRDPAD (NAAM, SPONSOR) VALUES" DISPLAY" (' KEITH ', 'XXXXKATEXXXXXX');" EXECSQLINSERTINTO WEIRDPAD (NAAM, SPONSOR) VALUES
(' KEITH ', 'XXXXKATEXXXXXX') END-EXEC 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';"
EXECSQLSELECT TRIM (SPONSOR) INTO :ch2 FROM WEIRDPAD WHERE TRIM (NAAM) = 'KEITH'END-EXEC 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';"
EXECSQL DECLARE WWW CURSOR FOR SELECT TRIM (SPONSOR) FROM WEIRDPAD WHERE TRIM (NAAM) = 'KEITH'END-EXEC
DISPLAY"FETCH WWW INTO :ch2;" EXECSQL FETCH WWW INTO :ch2 END-EXEC 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';"
EXECSQLSELECT TRIM (SPONSOR) INTO :ch2 FROM WEIRDPAD WHERE TRIM (NAAM) = ' KEITH'END-EXEC 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';"
EXECSQLSELECT TRIM (SPONSOR) INTO :ch2 FROM WEIRDPAD WHERE TRIM (SPONSOR) = 'XXXXKATE' END-EXEC 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 EXECSQLSELECT TRIM (B.NAAM) INTO :ch10 FROM
WEIRDPAD A,
WEIRDPAD B WHERE TRIM (A.NAAM)
= TRIM (B.SPONSOR) END-EXEC 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 EXECSQLSELECT TRIM (B.NAAM) INTO :ch9
:indic1 FROM WEIRDPAD A,
WEIRDPAD B WHERE TRIM (A.NAAM)
= TRIM (B.SPONSOR) END-EXEC 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 EXECSQLSELECTCOUNT(*) INTO :int1 FROM WEIRDPAD A,
WEIRDPAD B WHERE TRIM (A.SPONSOR)
= TRIM (B.NAAM) END-EXEC 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%';" EXECSQLSELECT TRIM (NAAM) INTO :ch2 FROM WEIRDPAD WHERE NAAM LIKE 'KATE%'END-EXEC 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%';" EXECSQLSELECT TRIM (:ch3) INTO :ch2 FROM WEIRDPAD WHERE NAAM LIKE 'KATE%'END-EXEC 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';" EXECSQLINSERTINTO WEIRDPAD (NAAM, SPONSOR) SELECT DISTINCT TRIM (HU.STAFF.CITY),
TRIM (PTYPE) FROM HU.STAFF, HU.PROJ WHERE EMPNAME = 'Alice'END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM WEIRDPAD END-EXEC 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);" EXECSQL UPDATE WEIRDPAD SET SPONSOR = TRIM (SPONSOR),
NAAM = TRIM (NAAM) END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD" DISPLAY" WHERE NAAM = 'KATE' OR SPONSOR = 'KATE';" EXECSQLSELECTCOUNT(*) INTO :int1 FROM WEIRDPAD WHERE NAAM = 'KATE'OR SPONSOR = 'KATE'END-EXEC 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);" EXECSQLDELETEFROM WEIRDPAD WHERE
TRIM(:ch2) = TRIM(SPONSOR) END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM WEIRDPAD END-EXEC 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';" EXECSQL UPDATE WEIRDPAD SET PADCHAR = '0' WHERE SPONSOR = '000000000KEITH' OR NAAM = 'eale'END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"UPDATE WEIRDPAD" DISPLAY" SET SPONSOR = NULL" DISPLAY" WHERE SPONSOR = 'Desig';" EXECSQL UPDATE WEIRDPAD SET SPONSOR = NULL WHERE SPONSOR = 'Desig'END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM WEIRDPAD" DISPLAY" WHERE TRIM (PADCHAR FROM SPONSOR) IS NULL;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM WEIRDPAD WHERE TRIM (SPONSOR) ISNULLEND-EXEC 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 (SPONSOR) = 'KEITH';" EXECSQLSELECTCOUNT(*) INTO :int1 FROM WEIRDPAD WHERE TRIM (SPONSOR) = 'KEITH'END-EXEC 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"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
EXECSQLCOMMIT WORK END-EXEC 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
¤ Dauer der Verarbeitung: 0.54 Sekunden
(vorverarbeitet am 2026-04-30)
¤
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.