* Standard COBOL (file "DML073.SCO") calling SQL * procedures in file "DML073.MCO".
**************************************************************** * * COMMENT SECTION * * DATE 1989/08/21 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. * * DML073.SCO * WRITTEN BY: SUN DAJUN * * THIS ROUTINE TESTS SUM, AVG, MAX ON JOINED TABLE * * REFERENCES * AMERICAN NATIONAL STANDARD database language - * X3.135-1989, 8.10, GR 9 c) * ****************************************************************
* EXEC SQL SELECT SUM(HOURS), MAX(HOURS) * INTO :HOUR1, :HOUR2 * FROM STAFF, WORKS END-EXEC CALL"SUB1"USING SQLCODE HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD
DISPLAY"The correct answer is:" DISPLAY" 2320, 80" DISPLAY"Your answer is:" DISPLAY" ", HOUR1 ", ", HOUR2 if (HOUR1 = 2320 AND HOUR2 = 80) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0393','pass','MCO') END-EXEC CALL"SUB2"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml073.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0393','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB3"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF DISPLAY "====================================================" * EXEC SQL COMMIT WORK END-EXEC CALL"SUB4"USING SQLCODE MOVE SQLCODE TO SQL-COD
******************** END TEST0393 *******************
******************** BEGIN TEST0394 *******************
DISPLAY" TEST0394 " DISPLAY" AVG, MIN on joined table with WHERE without
- " GROUP" DISPLAY" Reference: ANSI X3.135-1989 5.8 5.21" DISPLAY" - - - - - - - - - - - - - - - - - - - - - - -" DISPLAY" " DISPLAY" SELECT AVG(HOURS), MIN(HOURS)" DISPLAY" INTO :HOUR1, :HOUR2" DISPLAY" FROM STAFF, WORKS" DISPLAY" WHERE STAFF.EMPNUM = 'E2'" DISPLAY" AND STAFF.EMPNUM =
- " WORKS.EMPNUM;"
* EXEC SQL SELECT AVG(HOURS), MIN(HOURS) * INTO :HOUR1, :HOUR2 * FROM STAFF, WORKS * WHERE STAFF.EMPNUM = 'E2' * AND STAFF.EMPNUM = WORKS.EMPNUM END-EXEC CALL"SUB5"USING SQLCODE HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD
DISPLAY"The correct answer is:" DISPLAY" 60, 40" DISPLAY"Your answer is:" DISPLAY" ", HOUR1 ", ", HOUR2 if (HOUR1 = 60 AND HOUR2 = 40) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0394','pass','MCO') END-EXEC CALL"SUB6"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml073.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0394','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB7"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF DISPLAY "====================================================" * EXEC SQL COMMIT WORK END-EXEC CALL"SUB8"USING SQLCODE MOVE SQLCODE TO SQL-COD
******************** END TEST0394 *******************
******************** BEGIN TEST0395 *******************
DISPLAY" TEST0395 " DISPLAY"SUM, MIN on joined table with GROUP without WHERE" DISPLAY" Reference: ANSI X3.135-1989 5.8 5.22" DISPLAY" - - - - - - - - - - - - - - - - - - - - - - -" DISPLAY" " DISPLAY" DECLARE JUPITER CURSOR FOR " DISPLAY" SELECT STAFF.EMPNUM, SUM(HOURS),
- " MIN(HOURS)" DISPLAY" FROM STAFF, WORKS" DISPLAY" GROUP BY STAFF.EMPNUM" DISPLAY" ORDER BY 1;" DISPLAY" "
* EXEC SQL DECLARE JUPITER CURSOR FOR * SELECT STAFF.EMPNUM, SUM(HOURS), MIN(HOURS) * FROM STAFF, WORKS * GROUP BY STAFF.EMPNUM * ORDER BY 1 END-EXEC
DISPLAY"The correct answer is:" DISPLAY" E1, 464, 12" DISPLAY" E2, 464, 12" DISPLAY" E3, 464, 12" DISPLAY" E4, 464, 12" DISPLAY" E5, 464, 12" DISPLAY"Your answer is:" MOVE 1 TO ifpass * EXEC SQL OPEN JUPITER END-EXEC CALL"SUB9"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL FETCH JUPITER INTO :EMPNO1, :HOUR1, :HOUR2 * END-EXEC CALL"SUB10"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 ", ", HOUR1 ", ", HOUR2 if (HOUR1 NOT = 464 OR HOUR2 NOT = 12 OR EMPNO1 NOT = "E1") then MOVE 0 TO ifpass END-IF * EXEC SQL FETCH JUPITER INTO :EMPNO1, :HOUR1, :HOUR2 * END-EXEC CALL"SUB11"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 ", ", HOUR1 ", ", HOUR2 if (HOUR1 NOT = 464 OR HOUR2 NOT = 12 OR EMPNO1 NOT = "E2") then MOVE 0 TO ifpass END-IF * EXEC SQL FETCH JUPITER INTO :EMPNO1, :HOUR1, :HOUR2 * END-EXEC CALL"SUB12"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 ", ", HOUR1 ", ", HOUR2 if (HOUR1 NOT = 464 OR HOUR2 NOT = 12 OR EMPNO1 NOT = "E3") then MOVE 0 TO ifpass END-IF * EXEC SQL FETCH JUPITER INTO :EMPNO1, :HOUR1, :HOUR2 * END-EXEC CALL"SUB13"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 ", ", HOUR1 ", ", HOUR2 if (HOUR1 NOT = 464 OR HOUR2 NOT = 12 OR EMPNO1 NOT = "E4") then MOVE 0 TO ifpass END-IF * EXEC SQL FETCH JUPITER INTO :EMPNO1, :HOUR1, :HOUR2 * END-EXEC CALL"SUB14"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 ", ", HOUR1 ", ", HOUR2 if (HOUR1 NOT = 464 OR HOUR2 NOT = 12 OR EMPNO1 NOT = "E5") then MOVE 0 TO ifpass END-IF * EXEC SQL FETCH JUPITER INTO :EMPNO1, :HOUR1, :HOUR2 * END-EXEC CALL"SUB15"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0) then * EXEC SQL CLOSE JUPITER END-EXEC CALL"SUB16"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF if (ifpass = 1) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0395','pass','MCO') END-EXEC CALL"SUB17"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml073.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0395','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB18"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF DISPLAY "====================================================" * EXEC SQL COMMIT WORK END-EXEC CALL"SUB19"USING SQLCODE MOVE SQLCODE TO SQL-COD
******************** END TEST0395 *******************
******************** BEGIN TEST0396 *******************
DISPLAY" TEST0396 " DISPLAY"SUM, MIN on joined table with WHERE,GROUP
- " BY,HAVING" DISPLAY" Reference: ANSI X3.135-1989 5.8 5.21 5.22 5.23" DISPLAY" - - - - - - - - - - - - - - - - - - - - - - -" DISPLAY" " DISPLAY" DECLARE VENUS CURSOR FOR" DISPLAY" SELECT STAFF.EMPNUM, AVG(HOURS),
- " MIN(HOURS)" DISPLAY" FROM STAFF, WORKS" DISPLAY" WHERE STAFF.EMPNUM IN ('E1','E4','E3')
- " AND" DISPLAY" STAFF.EMPNUM = WORKS.EMPNUM" DISPLAY" GROUP BY STAFF.EMPNUM" DISPLAY" HAVING COUNT(*) > 1" DISPLAY" ORDER BY 1;" DISPLAY" "
* EXEC SQL DECLARE VENUS CURSOR FOR * SELECT STAFF.EMPNUM, AVG(HOURS), MIN(HOURS) * FROM STAFF, WORKS * WHERE STAFF.EMPNUM IN ('E1','E4','E3') AND * STAFF.EMPNUM = WORKS.EMPNUM * GROUP BY STAFF.EMPNUM * HAVING COUNT(*) > 1 * ORDER BY 1 END-EXEC
DISPLAY"The correct answer is:" DISPLAY" E1, 30 or 31, 12" DISPLAY" E4, 46 or 47, 20" DISPLAY"Your answer is:" MOVE 1 TO ifpass * EXEC SQL OPEN VENUS END-EXEC CALL"SUB20"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL FETCH VENUS INTO :EMPNO1, :HOUR1, :HOUR2 END-EXEC CALL"SUB21"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 ", ", HOUR1 ", ", HOUR2 if (HOUR1 < 30 OR HOUR1 > 31 OR HOUR2 NOT = 12 OR EMPNO1 NOT = "E1") then MOVE 0 TO ifpass END-IF * EXEC SQL FETCH VENUS INTO :EMPNO1, :HOUR1, :HOUR2 END-EXEC CALL"SUB22"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD DISPLAY" ", EMPNO1 ", ", HOUR1 ", ", HOUR2 if (HOUR1 < 46 OR HOUR1 > 47 OR HOUR2 NOT = 20 OR EMPNO1 NOT = "E4") then MOVE 0 TO ifpass END-IF * EXEC SQL FETCH VENUS INTO :EMPNO1, :HOUR1, :HOUR2 END-EXEC CALL"SUB23"USING SQLCODE EMPNO1 HOUR1 HOUR2 MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then MOVE 0 TO ifpass END-IF * EXEC SQL CLOSE VENUS END-EXEC CALL"SUB24"USING SQLCODE MOVE SQLCODE TO SQL-COD if (ifpass = 1) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0396','pass','MCO') END-EXEC CALL"SUB25"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml073.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0396','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB26"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF DISPLAY "====================================================" * EXEC SQL COMMIT WORK END-EXEC CALL"SUB27"USING SQLCODE MOVE SQLCODE TO SQL-COD
******************** END TEST0396 *******************
******************** BEGIN TEST0417 *******************
DISPLAY" TEST0417 " DISPLAY" Cartesian product GROUP BY 2 columns with NULLs" DISPLAY" Reference: ANSI X3.135-1989 5.22 GR 2) 3)" DISPLAY" 5.11 GR 7)" DISPLAY" - - - - - - - - - - - - - - - - - - - - - - -" DISPLAY" " DISPLAY" DECLARE PLUTO CURSOR FOR" DISPLAY" SELECT MAX(STAFF1.GRADE),
- " SUM(STAFF1.GRADE)" DISPLAY" FROM STAFF1, STAFF" DISPLAY" GROUP BY STAFF1.CITY, STAFF.CITY;" DISPLAY" "
MOVE 0 TO ifpass
* EXEC SQL DELETE FROM STAFF1 END-EXEC CALL"SUB28"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO STAFF * VALUES ('E6', 'David', 17, NULL) END-EXEC CALL"SUB29"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO STAFF * VALUES ('E7', 'Tony', 18, NULL) END-EXEC CALL"SUB30"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO STAFF1 * SELECT * FROM STAFF END-EXEC CALL"SUB31"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL DECLARE PLUTO CURSOR FOR * SELECT MAX(STAFF1.GRADE), SUM(STAFF1.GRADE) * FROM STAFF1, STAFF * GROUP BY STAFF1.CITY, STAFF.CITY END-EXEC
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.