* Standard COBOL (file "DML084.SCO") calling SQL * procedures in file "DML084.MCO". * STANDARD COBOL (file "DML084.SCO")
**************************************************************** * * COMMENT SECTION * * DATE 1992/07/14 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. * * DML084.SCO * WRITTEN BY: DAVID W. FLATER * * THIS ROUTINE TESTS THE SQLSTATE STATUS CODE. * * REFERENCES * ANSI SQL-1992 * 22.1 SQLSTATE * ****************************************************************
MOVE"SCHANZLE"TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx * EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO; CALL"SUB1"USING SQLCODE SQLSTATE uidx MOVE SQLCODE TO SQL-COD if (uid NOT = uidx) then DISPLAY"ERROR: User ", uid " expected. User ", uidx "
- " connected" STOPRUN END-IF MOVE 0 TO errcnt MOVE 1 TO flag
DISPLAY "SQL Test Suite, V6.0, Standard COBOL, dml084.sco" 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 TEST0503 ******************* MOVE 1 TO flag
DISPLAY" TEST0503 " DISPLAY"SQLSTATE = 42000: syntax error or access rule vio.
- " 1" DISPLAY"Note: VALID implementation-defined subclass will
- " be" DISPLAY" accepted instead of no-subclass value of 000
- " " DISPLAY"Reference ANSI SQL-1992," DISPLAY" section 6.3
DISPLAY"Test numbers 0503 and 0504 check for SQLSTATE" DISPLAY"42000 on syntax errors and access violations." DISPLAY"SQL-92 permits, but does not require, an" DISPLAY"implementation to achieve a high level of security" DISPLAY"by returning the same error for an access" DISPLAY"violation as for a reference to a non-existent" DISPLAY"table. This test exercises several different" DISPLAY"types of syntax errors and access violations. If" DISPLAY"you are trying for a high security level, please" DISPLAY"insure that the compilation AND the run time" DISPLAY"behavior of all these errors are" DISPLAY"indistinguishable." DISPLAY" " DISPLAY"For minimal SQL-92 conformance, each run time" DISPLAY"error must produce SQLSTATE 42000 or 42 with some" DISPLAY"implementor-defined subclass. The subclass can" DISPLAY"be different for each error. Compile time errors" DISPLAY"are also permissible." DISPLAY" " DISPLAY" " DISPLAY" " DISPLAY" "
*HU.UPUNIQ has a row (1,'A'), but SCHANZLE has no privileges MOVE 0 TO SQLCODE MOVE"x"TO ct1 MOVE"x"TO SQLSTATE DISPLAY"SELECT COL2 INTO :ct1 FROM HU.UPUNIQ WHERE NUMKEY
- " = 1;" * EXEC SQL SELECT COL2 INTO :ct1 FROM HU.UPUNIQ WHERE NUMKEY * = 1; CALL"SUB2"USING SQLCODE SQLSTATE ct1 MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST1 MOVE SQLCODE TO SQLCD1 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE DISPLAY"ct1 should NOT be 'A '; its value is ", ct1 if (SQLCODE NOT < 0 OR ct1 = "A ") then MOVE 0 TO flag END-IF PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF
*SCHANZLE has no privileges on table HU.UPUNIQ - attempt UPDATE DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"UPDATE HU.UPUNIQ SET COL2 = 'xx';" * EXEC SQL UPDATE HU.UPUNIQ SET COL2 = 'xx'; CALL"SUB3"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST2 MOVE SQLCODE TO SQLCD2 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF
*SCHANZLE has no privileges on table HU.UPUNIQ - attempt DELETE DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"DELETE FROM HU.UPUNIQ;" * EXEC SQL DELETE FROM HU.UPUNIQ; CALL"SUB4"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST3 MOVE SQLCODE TO SQLCD3 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF
*SCHANZLE has no privileges on table HU.UPUNIQ - attempt insert DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"INSERT INTO HU.UPUNIQ VALUES (9,'M');" * EXEC SQL INSERT INTO HU.UPUNIQ VALUES (9,'M'); CALL"SUB5"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST4 MOVE SQLCODE TO SQLCD4 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF
*Subtest 0503e begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*Privilege violation in 'inessential part' - middle subquery COMPUTE tmpcnt = -1 DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF" DISPLAY"WHERE GRADE <" DISPLAY" (SELECT MAX(HOURS) FROM HU.WORKS)" DISPLAY"OR GRADE >" DISPLAY" (SELECT MAX(NUMKEY) FROM HU.UPUNIQ)" DISPLAY"OR GRADE + 100 >" DISPLAY" (SELECT MIN(HOURS) FROM HU.WORKS);" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF * WHERE GRADE < * (SELECT MAX(HOURS) FROM HU.WORKS) * OR GRADE > * (SELECT MAX(NUMKEY) FROM HU.UPUNIQ) * OR GRADE + 100 > * (SELECT MIN(HOURS) FROM HU.WORKS); CALL"SUB6"USING SQLCODE SQLSTATE tmpcnt MOVE SQLCODE TO SQL-COD MOVE SQLSTATE TO SQLST5 MOVE SQLCODE TO SQLCD5 DISPLAY"tmpcnt should not be 5; its value is ", tmpcnt DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (tmpcnt = 5 OR SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF *Subtest 0503e ends
*Subtest 0503f begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*Privilege violation AND syntax error (column 2 is CHAR(2)) DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"INSERT INTO HU.UPUNIQ VALUES (13,44);" * EXEC SQL INSERT INTO HU.UPUNIQ VALUES (13,44); CALL"SUB7"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD4 OR SQLSTATE NOT = SQLST4) then DISPLAY"Optional security note:" DISPLAY"Different message for access violation and " DISPLAY" access violation with syntax error (CHAR
- " column) " END-IF *Subtest 0503f ends
*Subtest 0503g begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*Privilege violation AND syntax error (2 columns in row) DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"INSERT INTO HU.UPUNIQ VALUES (555666777);" * EXEC SQL INSERT INTO HU.UPUNIQ VALUES * (555666777); CALL"SUB8"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD4 OR SQLSTATE NOT = SQLST4) then DISPLAY"Optional security note:" DISPLAY"Different message for access violation and " DISPLAY" access violation with syntax error (wrong #
- " columns) " END-IF *Subtest 0503g ends
DISPLAY"Test numbers 0503 and 0504 check for SQLSTATE" DISPLAY"42000 on syntax errors and access violations." DISPLAY"SQL-92 permits, but does not require, an" DISPLAY"implementation to achieve a high level of security" DISPLAY"by returning the same error for an access" DISPLAY"violation as for a reference to a non-existent" DISPLAY"table. This test exercises several different" DISPLAY"types of syntax errors and access violations. If" DISPLAY"you are trying for a high security level, please" DISPLAY"insure that the compilation AND the run time" DISPLAY"behavior of all these errors are" DISPLAY"indistinguishable." DISPLAY" " DISPLAY"For minimal SQL-92 conformance, each run time" DISPLAY"error must produce SQLSTATE 42000 or 42 with some" DISPLAY"implementor-defined subclass. The subclass can" DISPLAY"be different for each error. Compile time errors" DISPLAY"are also permissible." DISPLAY" " DISPLAY" " DISPLAY" "
*HU.UPUPUP DOES NOT EXIST - attempt SELECT MOVE 0 TO SQLCODE MOVE"x"TO ct1 MOVE"x"TO SQLSTATE DISPLAY"SELECT COL2 INTO :ct1 FROM HU.UPUPUP WHERE NUMKEY
- " = 1;" * EXEC SQL SELECT COL2 INTO :ct1 FROM HU.UPUPUP WHERE NUMKEY * = 1; CALL"SUB13"USING SQLCODE SQLSTATE ct1 MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD1 OR SQLSTATE NOT = SQLST1) then DISPLAY"Optional security note:" DISPLAY"Different message for SELECT access violation " DISPLAY"and SELECT on table which does not exist." END-IF
*HU.UPUPUP does not exist - attempt UPDATE DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"UPDATE HU.UPUPUP SET COL2 = 'xx';" * EXEC SQL UPDATE HU.UPUPUP SET COL2 = 'xx'; CALL"SUB14"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD2 OR SQLSTATE NOT = SQLST2) then DISPLAY"Optional security note:" DISPLAY"Different message for UPDATE access violation " DISPLAY"and UPDATE of table which does not exist." END-IF
*HU.UPUPUP does not exist - attempt DELETE DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"DELETE FROM HU.UPUPUP;" * EXEC SQL DELETE FROM HU.UPUPUP; CALL"SUB15"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD3 OR SQLSTATE NOT = SQLST3) then DISPLAY"Optional security note:" DISPLAY"Different message for DELETE access violation " DISPLAY"and DELETE for table which does not exist." END-IF
*HU.UPUPUP does not exist - attempt insert DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"INSERT INTO HU.UPUPUP VALUES (9,'M');" * EXEC SQL INSERT INTO HU.UPUPUP VALUES (9,'M'); CALL"SUB16"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD4 OR SQLSTATE NOT = SQLST4) then DISPLAY"Optional security note:" DISPLAY"Different message for INSERT access violation " DISPLAY"and INSERT for table which does not exist." END-IF
*HU.UPUPUP DOES NOT EXIST - inessential part of middle subquery COMPUTE tmpcnt = -1 DISPLAY" " MOVE 0 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF" DISPLAY"WHERE GRADE <" DISPLAY" (SELECT MAX(HOURS) FROM HU.WORKS)" DISPLAY"OR GRADE >" DISPLAY" (SELECT MAX(NUMKEY) FROM HU.UPUPUP)" DISPLAY"OR GRADE + 100 >" DISPLAY" (SELECT MIN(HOURS) FROM HU.WORKS);" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF * WHERE GRADE < * (SELECT MAX(HOURS) FROM HU.WORKS) * OR GRADE > * (SELECT MAX(NUMKEY) FROM HU.UPUPUP) * OR GRADE + 100 > * (SELECT MIN(HOURS) FROM HU.WORKS); CALL"SUB17"USING SQLCODE SQLSTATE tmpcnt MOVE SQLCODE TO SQL-COD DISPLAY"tmpcnt should not be 5; its value is ", tmpcnt DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '42000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (tmpcnt = 5 OR SQLCODE NOT < 0 OR NR-TAB NOT = "42000") then MOVE 0 TO flag END-IF if (SQLCODE NOT = SQLCD5 OR SQLSTATE NOT = SQLST5) then DISPLAY"Optional security note:" DISPLAY"Different message for access violation and " DISPLAY" access violation with syntax error (wrong #
- " columns) " END-IF
* EXEC SQL COMMIT WORK; CALL"SUB21"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD ******************** END TEST0504 ********************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
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 NR-TAB
MOVE 3 TO norm1 *subclass begins in position 3 of char array NORMSQ MOVE 14 TO norm2 PERFORM P90 UNTIL norm2 > 36
if (NR-TAB = SQLSTATE) then GOTO EXIT-NOSUBCLASS END-IF *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)
MOVE 4 TO norm1 *examining position 4 of char array NORMSQ MOVE 1 TO norm2 PERFORM P89 UNTIL norm2 > 36
MOVE 5 TO norm1 *examining position 5 of char array NORMSQ MOVE 1 TO norm2 PERFORM P88 UNTIL norm2 > 36
*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 (NORMSQ(1) = "0"AND NORMSQ(2) = "1") then MOVE"0"TO NORMSQ(2) END-IF GOTO EXIT-NOSUBCLASS
.
P90. *valid subclass begins with 5-9, I-Z, end of ALPNUM table if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
P89. *valid characters are 0-9, A-Z if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
P88. *valid characters are 0-9, A-Z if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
EXIT-NOSUBCLASS. EXIT.
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.