**************************************************************** * * 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. * * DML113.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 dynamic version of DML112.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, dml113.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 TEST0622 ******************* 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)
*Statement too long for CONCATBUF; break into two views. *Even now, this statement has whitespace removed to make it fit
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'CREATE VIEW NULLINV AS'
|| ' SELECT ITEMKEY,ORDERED,CAST'
|| ' (NULL AS INTERVAL MONTH) AS MWAIT,CAST'
|| ' (NULL AS INTERVAL DAY TO HOUR) AS DWAIT FROM'
|| ' MERCH WHERE RDATE IS NOT NULL AND SOLD IS NULL'
|| ' AND MERCH.ITEMKEY NOT IN(SELECT ITEMKEY'
|| ' FROM TURNAROUND)'
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
COMPUTE int1 = -1 DISPLAY"FETCH C11313 INTO :int1;" EXECSQL FETCH C11313 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11314 INTO :int1;" EXECSQL FETCH C11314 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11315 INTO :int1;" EXECSQL FETCH C11315 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
COMPUTE int1 = -1 DISPLAY"FETCH C11316 INTO :int1;" EXECSQL FETCH C11316 INTO :int1 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
COMPUTE int1 = -1 MOVE 2 TO ind1 DISPLAY"FETCH C11317 INTO :int1:ind1;" EXECSQL FETCH C11317 INTO :int1:ind1 END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY"ind1 should be -1; its value is ", ind1 if (ind1 NOT = -1) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"FETCH C11318 INTO :int1;" EXECSQL FETCH C11318 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.
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'SELECT EXTRACT (HOUR FROM AVG (DWAIT))' || ' FROM MERCH, TURNAROUND WHERE' || ' MERCH.ITEMKEY = TURNAROUND.ITEMKEY OR' || ' TURNAROUND.ITEMKEY NOT IN' || ' (SELECT ITEMKEY FROM MERCH)'
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"PREPARE S11319 FROM :longst;" EXECSQL PREPARE S11319 FROM :longst END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DECLARE C11319 CURSOR FOR S11319;" EXECSQL DECLARE C11319 CURSOR FOR S11319 END-EXEC DISPLAY" "
DISPLAY"SQLCODE should be >= 0; its value is ", SQL-COD if (SQLCODE < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE can be 00000 or 01003; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "00000"AND SQLSTATE NOT = "01003") then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"FETCH C11319 INTO :int1;" EXECSQL FETCH C11319 INTO :int1 END-EXEC MOVESQLCODETO SQL-COD
*DML083 set the precedent for requiring 01003 on the fetches. *One might argue that it ought to be returned just on the *open and never again. DML083 is under dispute, so status *codes are checked loosely here.
DISPLAY"SQLCODE should be >= 0; its value is ", SQL-COD if (SQLCODE < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE can be 00000 or 01003; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "00000"AND SQLSTATE NOT = "01003") then MOVE 0 TO flag END-IF DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'SELECT COUNT(*)' || ' FROM INVENTORY WHERE MWAIT IS NULL' || ' AND DWAIT IS NULL'
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"PREPARE S1131A FROM :longst;" EXECSQL PREPARE S1131A FROM :longst END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DECLARE C1131A CURSOR FOR S1131A;" EXECSQL DECLARE C1131A CURSOR FOR S1131A END-EXEC DISPLAY" "
COMPUTE int1 = -1 DISPLAY"FETCH C1131A INTO :int1;" EXECSQL FETCH C1131A 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
DISPLAY"COMMIT WORK;" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD ******************** END TEST0622 ******************** ******************** BEGIN TEST0624 ******************* MOVE 1 TO flag
COMPUTE int1 = -1 DISPLAY"FETCH C11321 INTO :int1;" EXECSQL FETCH C11321 INTO :int1 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
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'SELECT COUNT(*) FROM JNULL3' || ' WHERE D2 IS NOT NULL OR D1 IS NOT NULL'
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"PREPARE S11322 FROM :longst;" EXECSQL PREPARE S11322 FROM :longst END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DECLARE C11322 CURSOR FOR S11322;" EXECSQL DECLARE C11322 CURSOR FOR S11322 END-EXEC DISPLAY" "
COMPUTE int1 = -1 DISPLAY"FETCH C11322 INTO :int1;" EXECSQL FETCH C11322 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11323 INTO :int1;" EXECSQL FETCH C11323 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11324 INTO :int1;" EXECSQL FETCH C11324 INTO :int1 END-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
COMPUTE int1 = -1 DISPLAY"FETCH C11321 INTO :int1;" EXECSQL FETCH C11321 INTO :int1 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"FETCH C11325 INTO :int1;" EXECSQL FETCH C11325 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11326 INTO :int1;" EXECSQL FETCH C11326 INTO :int1 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"FETCH C11327 INTO :int1;" EXECSQL FETCH C11327 INTO :int1 END-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"dstmt=""SELECT AVG(D1) * 10 FROM JNULL3""" MOVE"SELECT AVG(D1) * 10 FROM JNULL3
- " "TO dstmt
DISPLAY"PREPARE S11328 FROM :dstmt;" EXECSQL PREPARE S11328 FROM :dstmt END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DECLARE C11328 CURSOR FOR S11328;" EXECSQL DECLARE C11328 CURSOR FOR S11328 END-EXEC DISPLAY" "
DISPLAY"OPEN C11328;" EXECSQLOPEN C11328 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" "
COMPUTE int1 = -1 DISPLAY"FETCH C11328 INTO :int1;" EXECSQL FETCH C11328 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 15; its value is ", int1 if (int1 NOT = 15) then MOVE 0 TO flag END-IF
COMPUTE int1 = -1 DISPLAY"FETCH C11329 INTO :int1;" EXECSQL FETCH C11329 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C1132A INTO :int1;" EXECSQL FETCH C1132A 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
COMPUTE int1 = -1 DISPLAY"FETCH C1132B INTO :int1;" EXECSQL FETCH C1132B 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
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD ******************** END TEST0624 ******************** ******************** BEGIN TEST0626 ******************* MOVE 1 TO flag
DISPLAY"dstmt=""SELECT COUNT(*) FROM CHANGG WHERE DIVORCES
- " IS NULL""" MOVE"SELECT COUNT(*) FROM CHANGG WHERE DIVORCES
- " IS NULL"TO dstmt
DISPLAY"PREPARE S11331 FROM :dstmt;" EXECSQL PREPARE S11331 FROM :dstmt END-EXEC MOVESQLCODETO SQL-COD
if (SQLCODE = 0) then DISPLAY"SQLCODE is 0" GOTO P101 END-IF
DISPLAY"SQLCODE is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF GOTO P100
.
P101. DISPLAY"DECLARE C11331 CURSOR FOR S11331;" EXECSQL DECLARE C11331 CURSOR FOR S11331 END-EXEC DISPLAY" "
if (SQLCODE = 0) then DISPLAY"SQLCODE is 0" GOTO P102 END-IF
DISPLAY"SQLCODE is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF GOTO P100
.
P102. DISPLAY"FETCH C11331 INTO :int1;" EXECSQL FETCH C11331 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11332 INTO :int1;" EXECSQL FETCH C11332 INTO :int1 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
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'SELECT AGE, NUMBRR, DIVORCES FROM CHANGG' || ' WHERE NAAM = ?'
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"PREPARE S11333 FROM :longst;" EXECSQL PREPARE S11333 FROM :longst END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DECLARE C11333 CURSOR FOR S11333;" EXECSQL DECLARE C11333 CURSOR FOR S11333 END-EXEC DISPLAY" "
MOVE"RUDOLPH "TO ch3 DISPLAY"ch3 is '", CH3 "'"
DISPLAY"OPEN C11333 USING :ch3;" EXECSQLOPEN C11333 USING :ch3 END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 COMPUTE int2 = -1 MOVE"xxxxxxxxxxx"TO ch1 DISPLAY"FETCH C11333 INTO :int1, :ch1, :int2;" EXECSQL FETCH C11333 INTO :int1, :ch1, :int2 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
DISPLAY"OPEN C11333 USING :ch3;" EXECSQLOPEN C11333 USING :ch3 END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 COMPUTE int2 = -1 MOVE 10 TO ind1 MOVE"xxxxxxxxxxx"TO ch1 DISPLAY"FETCH C11333 INTO :int1, :ch1, :int2:ind1;" EXECSQL FETCH C11333 INTO :int1, :ch1, :int2:ind1 END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 33; its value is ", int1 DISPLAY"ind1 should be -1; its value is ", ind1 DISPLAY"ch1 should be '738-47-1847'; its value is '",
ch1 "'" if (int1 NOT = 33 OR ind1 NOT = -1) then MOVE 0 TO flag END-IF if (ch1 NOT = "738-47-1847") then MOVE 0 TO flag END-IF
DISPLAY"OPEN C11333 USING :ch3;" EXECSQLOPEN C11333 USING :ch3 END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 COMPUTE int2 = -1 MOVE"xxxxxxxxxxx"TO ch1 DISPLAY"FETCH C11333 INTO :int1, :ch1, :int2;" EXECSQL FETCH C11333 INTO :int1, :ch1, :int2 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
DISPLAY"OPEN C11333 USING :ch3;" EXECSQLOPEN C11333 USING :ch3 END-EXEC MOVESQLCODETO SQL-COD PERFORM CHCKOK DISPLAY" "
COMPUTE int1 = -1 COMPUTE int2 = -1 MOVE"xxxxxxxxxxx"TO ch1 DISPLAY"FETCH C11333 INTO :int1, :ch1, :int2;" EXECSQL FETCH C11333 INTO :int1, :ch1, :int2 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"FETCH C11334 INTO :int1;" EXECSQL FETCH C11334 INTO :int1 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" "
*This select should fail
DISPLAY"dstmt=""SELECT COUNT(*) FROM CHANGG WHERE AGE >
- " 30""" MOVE"SELECT COUNT(*) FROM CHANGG WHERE AGE > 30
- " "TO dstmt
DISPLAY"PREPARE S11335 FROM :dstmt;" EXECSQL PREPARE S11335 FROM :dstmt END-EXEC MOVESQLCODETO SQL-COD
if (SQLCODE = 0) then DISPLAY"SQLCODE is 0" GOTO P104 END-IF
DISPLAY"SQLCODE is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF GOTO P103
.
P104. DISPLAY"DECLARE C11335 CURSOR FOR S11335;" EXECSQL DECLARE C11335 CURSOR FOR S11335 END-EXEC DISPLAY" "
if (SQLCODE = 0) then DISPLAY"SQLCODE is 0" GOTO P105 END-IF
DISPLAY"SQLCODE is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF GOTO P103
.
P105. DISPLAY"FETCH C11335 INTO :int1;" EXECSQL FETCH C11335 INTO :int1 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"dstmt=""SELECT COUNT(*) FROM CHANGG WHERE DIVORCES
- " IS NULL""" MOVE"SELECT COUNT(*) FROM CHANGG WHERE DIVORCES
- " IS NULL"TO dstmt
DISPLAY"PREPARE S11336 FROM :dstmt;" EXECSQL PREPARE S11336 FROM :dstmt END-EXEC MOVESQLCODETO SQL-COD
if (SQLCODE = 0) then DISPLAY"SQLCODE is 0" GOTO P107 END-IF
DISPLAY"SQLCODE is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF GOTO P106
.
P107. DISPLAY"DECLARE C11336 CURSOR FOR S11336;" EXECSQL DECLARE C11336 CURSOR FOR S11336 END-EXEC DISPLAY" "
if (SQLCODE = 0) then DISPLAY"SQLCODE is 0" GOTO P108 END-IF
DISPLAY"SQLCODE is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is '",
SQLSTATE "'" PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NORMSQ NOT = "42000") then MOVE 0 TO flag END-IF if (NORMSQ = "42000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF GOTO P106
.
P108. DISPLAY"FETCH C11336 INTO :int1;" EXECSQL FETCH C11336 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11337 INTO :ch2;" EXECSQL FETCH C11337 INTO :ch2 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
PERFORM CHCKOK DISPLAY" "
*TEd Hook #1 Check 11.15 SR.3 (can't drop all the columns) DISPLAY"dstmt=""ALTER TABLE CHANGG DROP NUMBRR RESTRICT""" MOVE"ALTER TABLE CHANGG DROP NUMBRR RESTRICT " TO dstmt
DISPLAY"EXECUTE IMMEDIATE :dstmt;" EXECSQL EXECUTE IMMEDIATE :dstmt 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
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD ******************** END TEST0626 ******************** ******************** BEGIN TEST0632 ******************* MOVE 1 TO flag
COMPUTE int1 = -1 DISPLAY"FETCH C11342 INTO :int1;" EXECSQL FETCH C11342 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11343 INTO :int1;" EXECSQL FETCH C11343 INTO :int1 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
COMPUTE int1 = -1 DISPLAY"FETCH C11344 INTO :int1;" EXECSQL FETCH C11344 INTO :int1 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
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'SELECT COUNT (*) FROM OBITUARIES' || ' WHERE BORN <> DATE ''1880-01-01''' || ' OR BORN IS NULL' || ' OR DIED <> TESTING1' || ' OR DIED IS NULL' || ' OR ENTERED <> TESTING2' || ' OR ENTERED IS NULL'
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"PREPARE S11345 FROM :longst;" EXECSQL PREPARE S11345 FROM :longst END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DECLARE C11345 CURSOR FOR S11345;" EXECSQL DECLARE C11345 CURSOR FOR S11345 END-EXEC DISPLAY" "
COMPUTE int1 = -1 DISPLAY"FETCH C11345 INTO :int1;" EXECSQL FETCH C11345 INTO :int1 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
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD ******************** END TEST0632 ******************** ******************** BEGIN TEST0634 ******************* MOVE 1 TO flag
DISPLAY" TEST0634 " DISPLAY" TRIM function (dynamic)" DISPLAY"References:" DISPLAY" FIPS PUB 127-2 14.1 Transitional SQL features
- " 1,7" DISPLAY" - - - - - - - - - - - - - - - - - - -"
MOVE"BLAHBLAHBLAHBL"TO ch2 DISPLAY"FETCH C11351 INTO :ch2;" EXECSQL FETCH C11351 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")
MOVE"BLAHBLAHBLAHBL"TO ch2 DISPLAY"FETCH C11352 INTO :ch2;" EXECSQL FETCH C11352 INTO :ch2 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
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'SELECT COUNT(*) FROM WEIRDPAD A,' || ' WEIRDPAD B WHERE TRIM (BOTH ''B'' FROM A.NAAM)' || ' = TRIM (BOTH ''X'' FROM B.SPONSOR)'
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"PREPARE S11353 FROM :longst;" EXECSQL PREPARE S11353 FROM :longst END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DECLARE C11353 CURSOR FOR S11353;" EXECSQL DECLARE C11353 CURSOR FOR S11353 END-EXEC DISPLAY" "
COMPUTE int1 = -1 DISPLAY"FETCH C11353 INTO :int1;" EXECSQL FETCH C11353 INTO :int1 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
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'SELECT COUNT(*) FROM WEIRDPAD A,'
|| ' WEIRDPAD B WHERE TRIM (LEADING ''0'' FROM A.SPONSOR)'
|| ' = TRIM ('' '' FROM B.NAAM)'
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"PREPARE S11354 FROM :longst;" EXECSQL PREPARE S11354 FROM :longst END-EXEC MOVESQLCODETO SQL-COD
PERFORM CHCKOK DISPLAY" "
DISPLAY"DECLARE C11354 CURSOR FOR S11354;" EXECSQL DECLARE C11354 CURSOR FOR S11354 END-EXEC DISPLAY" "
COMPUTE int1 = -1 DISPLAY"FETCH C11354 INTO :int1;" EXECSQL FETCH C11354 INTO :int1 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
EXECSQLDELETEFROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO CONCATBUF VALUES ( 'SELECT TRIM (''BB'' FROM NAAM)' || ' FROM WEIRDPAD WHERE NAAM LIKE' || ' ''KATE%'''
) END-EXEC MOVESQLCODETO SQL-COD EXECSQLSELECT ZZ INTO :longst FROM CONCATBUF END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"longst=""", longst """"
DISPLAY"PREPARE S11355 FROM :longst;" EXECSQL PREPARE S11355 FROM :longst END-EXEC MOVESQLCODETO SQL-COD
if (SQLCODE = 0) then DISPLAY"SQLCODE is 0" GOTO P111 END-IF
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 GOTO P110
.
P111. DISPLAY"DECLARE C11355 CURSOR FOR S11355;" EXECSQL DECLARE C11355 CURSOR FOR S11355 END-EXEC DISPLAY" "
if (SQLCODE = 0) then DISPLAY"SQLCODE is 0" GOTO P109 END-IF
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 GOTO P110
.
P109. DISPLAY"FETCH C11355 INTO :int1;" EXECSQL FETCH C11355 INTO :int1 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
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD ******************** END TEST0634 ******************** **** 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.119 Sekunden
(vorverarbeitet am 2026-04-25)
¤
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.