* Standard COBOL (file "DML075.SCO") calling SQL * procedures in file "DML075.MCO".
* STANDARD COBOL (file "DML075.SCO")
**************************************************************** * * COMMENT SECTION * * DATE 1991/26/06 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. * * DML075.SCO * 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 CALL"AUTHCK"USING SQLCODE uidx MOVE SQLCODE TO SQL-COD 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, Module COBOL, dml075.sco" 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
* EXEC SQL SELECT COUNT(*) INTO :count1 * FROM STAFF * WHERE EMPNUM IN * (SELECT EMPNUM FROM WORKS); CALL"SUB1"USING SQLCODE count1 MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO STAFF1 * SELECT * FROM STAFF; CALL"SUB2"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count2 * FROM STAFF1 * WHERE EMPNUM IN * (SELECT EMPNUM FROM WORKS); CALL"SUB3"USING SQLCODE count2 MOVE SQLCODE TO SQL-COD
******************** END TEST0431 *******************
******************** BEGIN TEST0432 *******************
DISPLAY" TEST0432 " DISPLAY" Unknown condition in subquery of ALL, SOME, ANY" DISPLAY" reference X3.135-1989 5.16, GR 2e" 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
* EXEC SQL UPDATE PROJ SET CITY = NULL * WHERE PNUM = 'P3'; CALL"SUB8"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count1 * FROM STAFF * WHERE CITY = ALL (SELECT CITY * FROM PROJ * WHERE PNAME = 'SDP'); CALL"SUB9"USING SQLCODE count1 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count2 * FROM STAFF * WHERE CITY <> ALL (SELECT CITY * FROM PROJ * WHERE PNAME = 'SDP'); CALL"SUB10"USING SQLCODE count2 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count3 * FROM STAFF * WHERE CITY = ANY (SELECT CITY * FROM PROJ * WHERE PNAME = 'SDP'); CALL"SUB11"USING SQLCODE count3 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count4 * FROM STAFF * WHERE CITY <> ANY (SELECT CITY * FROM PROJ * WHERE PNAME = 'SDP'); CALL"SUB12"USING SQLCODE count4 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count5 * FROM STAFF * WHERE CITY = SOME (SELECT CITY * FROM PROJ * WHERE PNAME = 'SDP'); CALL"SUB13"USING SQLCODE count5 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count6 * FROM STAFF * WHERE CITY <> SOME (SELECT CITY * FROM PROJ * WHERE PNAME = 'SDP'); CALL"SUB14"USING SQLCODE count6 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 *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0432','pass','MCO'); CALL"SUB16"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml075.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0432','fail','MCO'); ADD 1 TO errcnt CALL"SUB17"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF * EXEC SQL COMMIT WORK; CALL"SUB18"USING SQLCODE 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
* EXEC SQL SELECT COUNT(*) INTO :count1 * FROM PROJ * WHERE PNUM = ALL (SELECT PNUM * FROM WORKS * WHERE EMPNUM = 'E8'); CALL"SUB19"USING SQLCODE count1 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count2 * FROM PROJ * WHERE PNUM <> ALL (SELECT PNUM * FROM WORKS * WHERE EMPNUM = 'E8'); CALL"SUB20"USING SQLCODE count2 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count3 * FROM PROJ * WHERE PNUM = ANY (SELECT PNUM * FROM WORKS * WHERE EMPNUM = 'E8'); CALL"SUB21"USING SQLCODE count3 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count4 * FROM PROJ * WHERE PNUM <> ANY (SELECT PNUM * FROM WORKS * WHERE EMPNUM = 'E8'); CALL"SUB22"USING SQLCODE count4 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count5 * FROM PROJ * WHERE PNUM = SOME (SELECT PNUM * FROM WORKS * WHERE EMPNUM = 'E8'); CALL"SUB23"USING SQLCODE count5 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count6 * FROM PROJ * WHERE PNUM <> SOME (SELECT PNUM * FROM WORKS * WHERE EMPNUM = 'E8'); CALL"SUB24"USING SQLCODE count6 MOVE SQLCODE TO SQL-COD
* EXEC SQL 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
* EXEC SQL OPEN FIDO; CALL"SUB28"USING SQLCODE 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 *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0434','pass','MCO'); CALL"SUB29"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml075.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0434','fail','MCO'); ADD 1 TO errcnt CALL"SUB30"USING SQLCODE 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" "
* EXEC SQL CLOSE ZZ; CALL"SUB35"USING SQLCODE MOVE SQLCODE TO SQL-COD
MOVE 0 TO count3 MOVE 1 TO flag7 MOVE 1 TO flag8 MOVE 0 TO TOTAL1
* EXEC SQL DECLARE AA CURSOR FOR * SELECT DISTINCT SUM(BUDGET) * FROM PROJ * GROUP BY PTYPE, CITY * HAVING AVG(BUDGET) > 21000 END-EXEC
* EXEC SQL OPEN AA; CALL"SUB36"USING SQLCODE 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 *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0442','pass','MCO'); CALL"SUB37"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml075.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0442','fail','MCO'); ADD 1 TO errcnt CALL"SUB38"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF
******************** END TEST0442 ******************* **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
P50. * EXEC SQL FETCH FIDO INTO :NUM, :HRS; CALL"SUB40"USING SQLCODE NUM HRS 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. * EXEC SQL FETCH YY INTO :PTPE, :CTY; CALL"SUB41"USING SQLCODE PTPE CTY 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. * EXEC SQL FETCH ZZ INTO :PTPE, :CTY; CALL"SUB42"USING SQLCODE PTPE CTY 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. * EXEC SQL FETCH AA INTO :TOTAL1; CALL"SUB43"USING SQLCODE TOTAL1 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
.
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.17Angebot
Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können
¤
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.