**************************************************************** * * COMMENT SECTION * * DATE 1991/10/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. * * DML079.PCO * WRITTEN BY: SHIRLEY HURWITZ * * THIS ROUTINE TESTS MISCELLANEOUS FEATURES. * * REFERENCES * AMERICAN NATIONAL STANDARD database language - SQL * X3.135-1989 * X3.168-1989 * ****************************************************************
MOVE"HU"TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx EXECSQLSELECT USER INTO :uidx FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD if (uid NOT = uidx) then DISPLAY"ERROR: User ", uid " expected. User ", uidx "
- " connected" END-IF MOVE 0 TO errcnt DISPLAY "SQL Test Suite, V6.0, Embedded COBOL, dml079.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 TEST0451 *******************
DISPLAY"==============================================" DISPLAY" TEST0451 " DISPLAY" UNIQUEness is case sensitive " DISPLAY"X3.135-1989 Sec. 4.2.1 Character strings " DISPLAY"X3.135-1989 Sec. 5.1 Format " DISPLAY" - - - - - - - - - - - - - - - - - - -"
MOVE 0 TO i
EXECSQL UPDATE STAFF SET EMPNUM = 'e2'
WHERE EMPNUM = 'E4'END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 1. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
EXECSQLINSERTINTO STAFF(EMPNUM)
VALUES ('E1') END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 2. SQLCODE less than 0 is a pass. SQLCODE = ",
SQL-COD
EXECSQLINSERTINTO STAFF(EMPNUM)
VALUES ('e1') END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 3. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
EXECSQL UPDATE STAFF SET EMPNUM = 'E1' WHERE EMPNUM = 'e1'END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 4. SQLCODE less than 0 is a pass. SQLCODE = ",
SQL-COD
EXECSQLINSERTINTO WORKS (EMPNUM,PNUM)
VALUES ('e1','p2') END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 5. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
EXECSQLINSERTINTO WORKS (EMPNUM,PNUM)
VALUES ('E1','p2') END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 6. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
EXECSQLINSERTINTO WORKS (EMPNUM,PNUM)
VALUES ('E1','P2') END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 7. SQLCODE less than 0 is a pass. SQLCODE = ",
SQL-COD
EXECSQLINSERTINTO WORKS (EMPNUM,PNUM)
VALUES ('e1', 'P2') END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 8. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
EXECSQL UPDATE WORKS SET EMPNUM = 'E1'
WHERE PNUM = 'P5'AND EMPNUM = 'E4'END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 9. SQLCODE less than 0 is a pass. SQLCODE = ",
SQL-COD
EXECSQL UPDATE WORKS SET EMPNUM = 'e1'
WHERE PNUM = 'P5'AND EMPNUM = 'E4'END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 10. SQLCODE = 0 is a pass. SQLCODE = ",
SQL-COD
EXECSQL UPDATE WORKS SET PNUM = 'P4'
WHERE PNUM = 'P2'AND EMPNUM = 'E4'END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 11. SQLCODE less than 0 is a pass. SQLCODE =
- " ", SQL-COD
EXECSQL UPDATE WORKS SET PNUM = 'p4'
WHERE PNUM = 'P2'AND EMPNUM = 'E4'END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 12. SQLCODE = 0 is a pass. SQLCODE = ",
SQL-COD
EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY" The correct answer is i = 12" DISPLAY" Your answer is i = ", i
if (i = 12) then DISPLAY" *** pass ***" EXECSQLINSERTINTO TESTREPORT
VALUES('0451','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml079.pco *** fail ***" EXECSQLINSERTINTO TESTREPORT
VALUES('0451','fail','PCO') END-EXEC MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF
DISPLAY" " EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY "====================================================="
******************** END TEST0451 *******************
******************** BEGIN TEST0452 *******************
MOVE 0 TO i MOVE 0 TO j
DISPLAY" TEST0452 " DISPLAY" Order of precedence, Left to Right, in UNION
- " (ALL) " DISPLAY"X3.135-1989 sec. 8.3 GR 2) b) and
- " " DISPLAY" - - - - - - - - - - - - - - - - - - -"
DISPLAY" *** FOR (SELECT EMPNAME FROM STAFF )" DISPLAY" *** UNION " DISPLAY" *** SELECT EMPNAME FROM STAFF " DISPLAY" *** UNION ALL " DISPLAY" *** SELECT EMPNAME FROM STAFF"
DISPLAY" *** FOR (SELECT EMPNAME FROM STAFF )" DISPLAY" *** UNION ALL " DISPLAY" *** SELECT EMPNAME FROM STAFF " DISPLAY" *** UNION " DISPLAY" *** SELECT EMPNAME FROM STAFF"
EXECSQL DECLARE X1 CURSOR FORSELECT EMPNAME FROM STAFF
UNION SELECT EMPNAME FROM STAFF
UNION ALL SELECT EMPNAME FROM STAFF END-EXEC
EXECSQL DECLARE X2 CURSOR FORSELECT EMPNAME FROM STAFF
UNION ALL SELECT EMPNAME FROM STAFF
UNION SELECT EMPNAME FROM STAFF END-EXEC
EXECSQLOPEN X1 END-EXEC MOVE SQLCODE TO SQL-COD
MOVE 1 TO ii PERFORM P50 UNTIL ii > 15
EXECSQLCLOSE X1 END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLOPEN X2 END-EXEC MOVE SQLCODE TO SQL-COD
MOVE 1 TO jj PERFORM P49 UNTIL jj > 15
EXECSQLCLOSE X2 END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"The correct answer is i=10 and j=5 " DISPLAY"Your answer is i=", i " j=", j " " if ((i = 10) AND (j = 5)) then DISPLAY" *** pass ***" EXECSQLINSERTINTO TESTREPORT
VALUES('0452','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml079.pco *** fail ***" EXECSQLINSERTINTO TESTREPORT
VALUES('0452','fail','PCO') END-EXEC MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF
DISPLAY" " EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY "====================================================="
******************** END TEST0452 *******************
******************** BEGIN TEST0453 *******************
DISPLAY" TEST0453 " DISPLAY" NULL with empty subquery in ALL, SOME, ANY" DISPLAY" ref. X3.135-1989 5.16, GR 2a and 2d empty
- " subquery " DISPLAY "--------------------------------------------------------"
EXECSQL UPDATE PROJ SET CITY = NULL WHERE PNAME = 'IRM'END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count1 FROM PROJ
WHERE CITY ISNULLEND-EXEC MOVE SQLCODE TO SQL-COD if (count1 NOT = 1) then MOVE 1 TO flag1 DISPLAY"Failed to set city to NULL for IRM " END-IF
EXECSQLSELECTCOUNT(*) INTO :count1 FROM PROJ
WHERE CITY = ALL (SELECT CITY FROM STAFF
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count2 FROM PROJ
WHERE CITY <> ALL (SELECT CITY FROM STAFF
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count3 FROM PROJ
WHERE CITY = ANY (SELECT CITY FROM STAFF
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count4 FROM PROJ
WHERE CITY <> ANY (SELECT CITY FROM STAFF
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count5 FROM PROJ
WHERE CITY = SOME (SELECT CITY FROM STAFF
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count6 FROM PROJ
WHERE CITY <> SOME (SELECT CITY FROM STAFF
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
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.