* Embedded SQL COBOL ("DML075.PCO") translated from * Embedded C on Mon Jul 15 13:48:11 1991.
* EMBEDDED COBOL (file "DML075.PCO")
**************************************************************** * * COMMENT SECTION * * DATE 1991/26/06 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. * * DML075.PCO * WRITTEN BY: YOLANDA HERD * * THIS ROUTINE TESTS MISCELLANEOUS FEATURES. * * REFERENCES * AMERICAN NATIONAL STANDARD database language - SQL * X3.135-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 if (uid NOT = uidx) then DISPLAY"ERROR: User " uid " expected." DISPLAY"User " uidx " connected." DISPLAY" " STOPRUN END-IF
MOVE 0 TO errcnt DISPLAY "SQL Test Suite, V6.0, Embedded COBOL, dml075.pco" DISPLAY" " DISPLAY "59-byte ID" DISPLAY"TEd Version #" DISPLAY" " * date_time print * ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
******************** BEGIN TEST0431 *******************
DISPLAY" TEST0431 " DISPLAY" Redundant rows in IN subquery" DISPLAY" reference X3.135-1989 5.13, GR2 " DISPLAY" -------------------------------------"
MOVE 0 TO count1 MOVE 0 TO count2
EXECSQLSELECTCOUNT(*) INTO :count1 FROM STAFF
WHERE EMPNUM IN
(SELECT EMPNUM FROM WORKS) END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLINSERTINTO STAFF1 SELECT * FROM STAFF END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count2 FROM STAFF1
WHERE EMPNUM IN
(SELECT EMPNUM FROM WORKS) END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
if ((count1 NOT = 0) OR (count2 NOT = 0) OR (count3 NOT = 2)) then MOVE 1 TO flag1 END-IF
if ((count4 NOT = 3) OR (count5 NOT = 2) OR (count6 NOT = 3)) then MOVE 1 TO flag2 END-IF
if ((flag1 = 0) AND (flag2 = 0)) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0432','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml075.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0432','fail','PCO') END-EXEC ADD 1 TO errcnt MOVE SQLCODE TO SQL-COD END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY "=================================================="
DISPLAY" "
******************** END TEST0432 *******************
******************** BEGIN TEST0433 *******************
DISPLAY" TEST0433 " DISPLAY" Empty subquery in ALL, SOME, ANY" DISPLAY" reference X3.135-1989 5.16, GR 2a and 2d empty
- " subquery" DISPLAY"------------------------------------------------
- "------------" MOVE 0 TO count1 MOVE 0 TO count2 MOVE 0 TO count3 MOVE 0 TO count4 MOVE 0 TO count5 MOVE 0 TO count6
EXECSQLSELECTCOUNT(*) INTO :count1 FROM PROJ
WHERE PNUM = ALL (SELECT PNUM FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count2 FROM PROJ
WHERE PNUM <> ALL (SELECT PNUM FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count3 FROM PROJ
WHERE PNUM = ANY (SELECT PNUM FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count4 FROM PROJ
WHERE PNUM <> ANY (SELECT PNUM FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count5 FROM PROJ
WHERE PNUM = SOME (SELECT PNUM FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLSELECTCOUNT(*) INTO :count6 FROM PROJ
WHERE PNUM <> SOME (SELECT PNUM FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL DECLARE FIDO CURSOR FOR SELECT PNUM, SUM(HOURS) FROM WORKS
GROUP BY PNUM
HAVING EXISTS (SELECT PNAME FROM PROJ
WHERE PROJ.PNUM = WORKS.PNUM AND SUM(WORKS.HOURS) > PROJ.BUDGET/200) END-EXEC
EXECSQLOPEN FIDO END-EXEC MOVE SQLCODE TO SQL-COD
MOVE 0 TO count1 MOVE 1 TO flag1 MOVE 1 TO flag2
DISPLAY"The correct answers are (in any order):" DISPLAY" NUM = P1, HRS = 80" DISPLAY" NUM = P5, HRS = 92" DISPLAY" 2 rows selected" DISPLAY" " DISPLAY"Your answers are:"
MOVE 1 TO i PERFORM P50 UNTIL i > 4
DISPLAY" ", count1 " rows selected" DISPLAY" "
if ((flag1 = 0) AND (flag2 = 0) AND (count1 = 2)) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0434','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml075.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0434','fail','PCO') END-EXEC ADD 1 TO errcnt MOVE SQLCODE TO SQL-COD END-IF
DISPLAY"Your answers are:" MOVE 1 TO i PERFORM P48 UNTIL i > 4 DISPLAY" ", count2 " rows selected" DISPLAY" "
EXECSQLCLOSE ZZ END-EXEC MOVE SQLCODE TO SQL-COD
MOVE 0 TO count3 MOVE 1 TO flag7 MOVE 1 TO flag8 MOVE 0 TO TOTAL1
EXECSQL DECLARE AA CURSOR FOR SELECT DISTINCT SUM(BUDGET) FROM PROJ
GROUP BY PTYPE, CITY
HAVING AVG(BUDGET) > 21000 END-EXEC
EXECSQLOPEN AA END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"The correct answers are (in any order):" DISPLAY" SUM(BUDGET) = 30000" DISPLAY" SUM(BUDGET) = 80000" DISPLAY" 2 rows selected" DISPLAY" " DISPLAY"Your answers are:" MOVE 1 TO i PERFORM P47 UNTIL i > 4
DISPLAY" ", count3 " rows selected" DISPLAY" "
MOVE 1 TO count5 MOVE 1 TO count6 MOVE 1 TO flag9
if ((flag1 = 0) AND (flag2 = 0) AND (flag3 = 0) AND (flag4 = 0)) then MOVE 0 TO count5 END-IF
if ((flag5 = 0) AND (flag6 = 0) AND (flag7 = 0) AND (flag8 = 0)) then MOVE 0 TO count6 END-IF
if ((count1 = 3) AND (count2 = 3) AND (count3 =
2)) then MOVE 0 TO flag9 END-IF
if ((count5 = 0) AND (count6 = 0) AND (flag9 =
0)) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0442','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml075.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0442','fail','PCO') END-EXEC ADD 1 TO errcnt MOVE SQLCODE TO SQL-COD END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
******************** END TEST0442 ******************* **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
P50. EXECSQL FETCH FIDO INTO :NUM, :HRS END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0) then COMPUTE count1 = count1 + 1 DISPLAY"NUM = ", NUM " and HRS = ", HRS if ((NUM = "P1 ") AND HRS = 80) then MOVE 0 TO flag1 END-IF if ((NUM = "P5 ") AND HRS = 92) then MOVE 0 TO flag2 END-IF END-IF ADD 1 TO i
.
P49. EXECSQL FETCH YY INTO :PTPE, :CTY END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0) then COMPUTE count1 = count1 + 1 if ((PTPE = "Code ") AND (CTY = "Vienna
- " ")) then MOVE 0 TO flag1 END-IF if ((PTPE = "Design") AND (CTY = "Deale
- " ")) then MOVE 0 TO flag2 END-IF if ((PTPE = "Test ") AND (CTY = "Tampa
- " ")) then MOVE 0 TO flag3 END-IF DISPLAY" PTPE = ", PTPE ", CTY = ", CTY END-IF ADD 1 TO i
.
P48. EXECSQL FETCH ZZ INTO :PTPE, :CTY END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0) then COMPUTE count2 = count2 + 1 if ((PTPE = "Code ") AND (CTY = "Vienna
- " ")) then MOVE 0 TO flag4 END-IF if ((PTPE = "Design") AND (CTY = "Deale
- " ")) then MOVE 0 TO flag5 END-IF if ((PTPE = "Test ") AND (CTY = "Tampa
- " ")) then MOVE 0 TO flag6 END-IF DISPLAY" PTPE = ", PTPE ", CTY = ", CTY END-IF ADD 1 TO i
.
P47. EXECSQL FETCH AA INTO :TOTAL1 END-EXEC MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0) then COMPUTE count3 = count3 + 1 DISPLAY"SUM(BUDGET) = ", TOTAL1 if (TOTAL1 = 30000) then MOVE 0 TO flag7 END-IF if (TOTAL1 = 80000) then MOVE 0 TO flag8 END-IF END-IF ADD 1 TO i
.
¤ Dauer der Verarbeitung: 0.15 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.