* Standard COBOL (file "DML070.SCO") calling SQL * procedures in file "DML070.MCO".
**************************************************************** * * COMMENT SECTION * * DATE 1990/11/28 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. * * DML070.SCO * WRITTEN BY: SUN DAJUN * * THIS ROUTINE TESTS SET OPERATIONS. * * REFERENCES * AMERICAN NATIONAL STANDARD database language - SQL * X3.135-1989 * * ****************************************************************
* EXEC SQL INSERT INTO STAFF * VALUES ('E6', 'Lendle', 17, 'Potomac') END-EXEC CALL"SUB1"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL DECLARE SCALLOP CURSOR FOR * SELECT PNUM, WORKS.EMPNUM, EMPNAME, HOURS * FROM WORKS,STAFF * WHERE STAFF.EMPNUM = WORKS.EMPNUM * ORDER BY 2 END-EXEC
DISPLAY"The correct result is :" DISPLAY" P2, E3, Carmen, 20" DISPLAY" ZZ, E5, Ed, -99" DISPLAY" ZZ, E6, Lendle, -99" DISPLAY"Your answer is :" * EXEC SQL OPEN SCALLOP END-EXEC CALL"SUB2"USING SQLCODE MOVE SQLCODE TO SQL-COD
MOVE 0 TO cnt2 MOVE 1 TO flag MOVE 0 TO count1 MOVE 1 TO cnt PERFORM P50 UNTIL cnt > 14
if (cnt2 NOT = 1) then MOVE 0 TO flag END-IF
* EXEC SQL CLOSE SCALLOP END-EXEC CALL"SUB3"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL DECLARE FISH CURSOR FOR * SELECT 'ZZ', EMPNUM, EMPNAME, -99 * FROM STAFF * WHERE NOT EXISTS (SELECT * FROM WORKS * WHERE WORKS.EMPNUM = STAFF.EMPNUM) * ORDER BY EMPNUM END-EXEC
* EXEC SQL OPEN FISH END-EXEC CALL"SUB4"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL FETCH FISH INTO :PNUM1, * :EMPNO1, :EMPNA1, :HOURS1 END-EXEC CALL"SUB5"USING SQLCODE PNUM1 EMPNO1 EMPNA1 HOURS1 MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0) then MOVE 0 TO flag END-IF DISPLAY" ", PNUM1 ", ", EMPNO1 ", ", EMPNA1 ",
- " ", HOURS1 if (EMPNO1 NOT = "E5"OR EMPNA1 NOT = "Ed") then MOVE 0 TO flag END-IF if (PNUM1 NOT = "ZZ"OR HOURS1 NOT = -99) then MOVE 0 TO flag END-IF
* EXEC SQL FETCH FISH INTO :PNUM1, * :EMPNO1, :EMPNA1, :HOURS1 END-EXEC CALL"SUB6"USING SQLCODE PNUM1 EMPNO1 EMPNA1 HOURS1 MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0) then MOVE 0 TO flag END-IF DISPLAY" ", PNUM1 ", ", EMPNO1 ", ", EMPNA1 ",
- " ", HOURS1 if (EMPNO1 NOT = "E6"OR EMPNA1 NOT = "Lendle") then MOVE 0 TO flag END-IF if (PNUM1 NOT = "ZZ"OR HOURS1 NOT = -99) then MOVE 0 TO flag END-IF
* EXEC SQL FETCH FISH INTO :PNUM1, * :EMPNO1, :EMPNA1, :HOURS1 END-EXEC CALL"SUB7"USING SQLCODE PNUM1 EMPNO1 EMPNA1 HOURS1 MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then MOVE 0 TO flag END-IF
* EXEC SQL CLOSE FISH END-EXEC CALL"SUB8"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK END-EXEC CALL"SUB9"USING SQLCODE MOVE SQLCODE TO SQL-COD
if (flag = 1 AND count1 = 12) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0409','pass','MCO') END-EXEC CALL"SUB10"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml070.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0409','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB11"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF
* EXEC SQL COMMIT WORK END-EXEC CALL"SUB12"USING SQLCODE MOVE SQLCODE TO SQL-COD
******************** END TEST0409 *******************
******************** BEGIN TEST0411 *******************
DISPLAY" TEST0411 " DISPLAY" Effective set difference" DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY" " DISPLAY"select all staff who joined project P2 and did not
- " join P1." DISPLAY" SELECT EMPNUM FROM WORKS" DISPLAY" WHERE PNUM = 'P2';" DISPLAY" **** DIFFER ****" DISPLAY" SELECT EMPNUM FROM WORKS" DISPLAY" WHERE PNUM = 'P1';" DISPLAY" " DISPLAY" " MOVE 0 TO HOURS1 MOVE"NV"TO EMPNO1
* EXEC SQL DECLARE SMURF CURSOR FOR * SELECT W1.EMPNUM FROM WORKS W1 * WHERE W1.PNUM = 'P2' * AND NOT EXISTS (SELECT * FROM WORKS W2 * WHERE W2.EMPNUM = W1.EMPNUM * AND W2.PNUM = 'P1') * ORDER BY 1 ASC END-EXEC
MOVE 0 TO flag DISPLAY"The correct result is :" DISPLAY" E3" DISPLAY" E4" DISPLAY" code1 <> 0" DISPLAY"Your answer is :" * EXEC SQL OPEN SMURF END-EXEC CALL"SUB21"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH SMURF INTO :EMPNO1 END-EXEC CALL"SUB22"USING SQLCODE EMPNO1 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 " " if (EMPNO1 NOT = "E3") then MOVE 1 TO flag END-IF * EXEC SQL FETCH SMURF INTO :EMPNO1 END-EXEC CALL"SUB23"USING SQLCODE EMPNO1 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 if (EMPNO1 NOT = "E4") then MOVE 1 TO flag END-IF * EXEC SQL FETCH SMURF INTO :EMPNO1 END-EXEC CALL"SUB24"USING SQLCODE EMPNO1 MOVE SQLCODE TO SQL-COD MOVE SQLCODE TO code1 DISPLAY" ", code1 * EXEC SQL CLOSE SMURF END-EXEC CALL"SUB25"USING SQLCODE MOVE SQLCODE TO SQL-COD
if (flag = 0 AND code1 NOT = 0) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0411','pass','MCO') END-EXEC CALL"SUB26"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml070.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0411','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB27"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF
* EXEC SQL COMMIT WORK END-EXEC CALL"SUB28"USING SQLCODE MOVE SQLCODE TO SQL-COD
******************** END TEST0411 *******************
******************** BEGIN TEST0412 *******************
DISPLAY" TEST0412 " DISPLAY" Effective set intersection" DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY" " DISPLAY"select all staff who joined both project P2 and
- " P1." DISPLAY" SELECT EMPNUM FROM WORKS" DISPLAY" WHERE PNUM = 'P2';" DISPLAY" **** INTERSECT *****" DISPLAY" SELECT EMPNUM FROM WORKS" DISPLAY" WHERE PNUM = 'P1';" DISPLAY" " DISPLAY" " MOVE 0 TO HOURS1 MOVE"NV"TO EMPNO1
* EXEC SQL DECLARE BULL CURSOR FOR * SELECT W1.EMPNUM FROM WORKS W1 * WHERE W1.PNUM = 'P2' * AND EXISTS (SELECT * FROM WORKS W2 * WHERE W1.EMPNUM = W2.EMPNUM * AND W2.PNUM = 'P1') * ORDER BY EMPNUM ASC END-EXEC
DISPLAY"The correct result is :" DISPLAY" E1" DISPLAY" E2" DISPLAY" code1 <> 0 " DISPLAY"Your answer is :" * EXEC SQL OPEN BULL END-EXEC CALL"SUB29"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH BULL INTO :EMPNO1 END-EXEC CALL"SUB30"USING SQLCODE EMPNO1 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 if (EMPNO1 NOT = "E1") then MOVE 1 TO flag END-IF * EXEC SQL FETCH BULL INTO :EMPNO1 END-EXEC CALL"SUB31"USING SQLCODE EMPNO1 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 if (EMPNO1 NOT = "E2") then MOVE 1 TO flag END-IF * EXEC SQL FETCH BULL INTO :EMPNO1 END-EXEC CALL"SUB32"USING SQLCODE EMPNO1 MOVE SQLCODE TO SQL-COD MOVE SQLCODE TO code1 DISPLAY" ", code1
* EXEC SQL CLOSE BULL END-EXEC CALL"SUB33"USING SQLCODE MOVE SQLCODE TO SQL-COD
if (flag = 0 AND code1 NOT = 0) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0412','pass','MCO') END-EXEC CALL"SUB34"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml070.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0412','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB35"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF
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.