IDENTIFICATION DIVISION.
PROGRAM-ID. DML075.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. xyz.
OBJECT-COMPUTER. xyz.
DATA DIVISION.
WORKING-STORAGE SECTION.
* 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
*
****************************************************************
EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 count1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 count2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 count3 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 count4 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 count5 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 count6 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 HRS PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 TOTAL1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 PTPE PIC X(6).
01 CTY PIC X(15).
01 NUM PIC X(3).
01 uid PIC X(18).
01 uidx PIC X(18).
EXEC SQL END DECLARE SECTION END-EXEC
01 SQLCODE PIC S9(9) COMP.
01 errcnt PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
01 flag1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag3 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag4 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag5 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag6 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag7 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag8 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag9 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 i PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
* date_time declaration *
01 TO-DAY PIC 9(6).
01 THE-TIME PIC 9(8).
PROCEDURE DIVISION.
P0.
MOVE "HU" TO uid
CALL "AUTHID" USING uid
MOVE "not logged in, not" TO uidx
EXEC SQL SELECT
USER INTO :uidx FROM HU.ECCO END-EXEC
if (uid NOT = uidx) then
DISPLAY "ERROR: User " uid " expected."
DISPLAY "User " uidx " connected."
DISPLAY " "
STOP RUN
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 FROM DATE
ACCEPT THE-TIME FROM TIME
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) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO STAFF1
SELECT * FROM STAFF END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count2
FROM STAFF1
WHERE EMPNUM IN
(SELECT EMPNUM FROM WORKS) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answers are:"
DISPLAY " count1 = 4, count2 = 4 "
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " count1 = ", count1 ", count2 = ", count2
if ((count1 = 4) AND (count2 = 4)) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0431','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml075.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0431','fail','PCO') END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"=================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
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' END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count1
FROM STAFF
WHERE CITY = ALL (SELECT CITY
FROM PROJ
WHERE PNAME = 'SDP') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count2
FROM STAFF
WHERE CITY <> ALL (SELECT CITY
FROM PROJ
WHERE PNAME = 'SDP') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count3
FROM STAFF
WHERE CITY = ANY (SELECT CITY
FROM PROJ
WHERE PNAME = 'SDP') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count4
FROM STAFF
WHERE CITY <> ANY (SELECT CITY
FROM PROJ
WHERE PNAME = 'SDP') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count5
FROM STAFF
WHERE CITY = SOME (SELECT CITY
FROM PROJ
WHERE PNAME = 'SDP') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count6
FROM STAFF
WHERE CITY <> SOME (SELECT CITY
FROM PROJ
WHERE PNAME = 'SDP') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 0 TO flag1
MOVE 0 TO flag2
DISPLAY " The correct answers are:"
DISPLAY " count1 = 0, count2 = 0, count3 = 2"
DISPLAY " count4 = 3, count5 = 2, count6 = 3"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " count1 = ", count1 ", count2 = ", count2 ",
- " count3 = ", count3
DISPLAY " count4 = ", count4 ", count5 = ", count5 ",
- " count6 = ", count6
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','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml075.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0432','fail','PCO') END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
EXEC SQL 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
EXEC SQL SELECT COUNT(*) INTO :count1
FROM PROJ
WHERE PNUM = ALL (SELECT PNUM
FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count2
FROM PROJ
WHERE PNUM <> ALL (SELECT PNUM
FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count3
FROM PROJ
WHERE PNUM = ANY (SELECT PNUM
FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count4
FROM PROJ
WHERE PNUM <> ANY (SELECT PNUM
FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count5
FROM PROJ
WHERE PNUM = SOME (SELECT PNUM
FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count6
FROM PROJ
WHERE PNUM <> SOME (SELECT PNUM
FROM WORKS
WHERE EMPNUM = 'E8') END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 0 TO flag1
MOVE 0 TO flag2
DISPLAY " The correct answers are:"
DISPLAY " count1 = 6, count2 = 6, count3 = 0"
DISPLAY " count4 = 0, count5 = 0, count6 = 0"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " count1 = ", count1 ", count2 = ", count2 ",
- " count3 = ", count3
DISPLAY " count4 = ", count4 ", count5 = ", count5 ",
- " count6 = ", count6
if ((count1 NOT = 6) OR (count2 NOT = 6) OR (count3
NOT = 0)) then
MOVE 1 TO flag1
END-IF
if ((count4 NOT = 0) OR (count5 NOT = 0) OR (count6
NOT = 0)) then
MOVE 1 TO flag2
END-IF
if ((flag1 = 0) AND (flag2 = 0)) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0433','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml075.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0433','fail','PCO') END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"=================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0433 *******************
******************** BEGIN TEST0434 *******************
DISPLAY " TEST0434 "
DISPLAY " GROUP BY with HAVING EXISTS-correlated set
- " function"
DISPLAY " reference 5.23 SR 2 and 5.8 SR 5 "
DISPLAY
"---------------------------------------------------------"
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 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 *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0434','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml075.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0434','fail','PCO') END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"=================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0434 *******************
******************** BEGIN TEST0442 *******************
DISPLAY " TEST0442 "
DISPLAY " DISTINCT with GROUP BY, HAVING "
DISPLAY " 5.25 GR 4 "
DISPLAY "
- " ----------------------------------------------------"
EXEC SQL DECLARE YY CURSOR FOR
SELECT PTYPE, CITY
FROM PROJ
GROUP BY PTYPE, CITY
HAVING AVG(BUDGET) > 21000 END-EXEC
EXEC SQL OPEN YY END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 0 TO count1
MOVE 1 TO flag1
MOVE 1 TO flag2
MOVE 1 TO flag3
MOVE "XXX" TO PTPE
MOVE "YYYYY" TO CTY
DISPLAY "The correct answers are: (in any order)"
DISPLAY " PTPE = Code, CTY = Vienna"
DISPLAY " PTPE = Design, CTY = Deale"
DISPLAY " PTPE = Test, CTY = Tampa"
DISPLAY " 3 rows selected"
DISPLAY " "
DISPLAY "Your answers are:"
MOVE 1 TO i
PERFORM P49 UNTIL i > 4
DISPLAY " ", count1 " rows selected"
DISPLAY " "
EXEC SQL CLOSE YY END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 1 TO flag4
MOVE 1 TO flag5
MOVE 1 TO flag6
MOVE 0 TO count2
MOVE "XXX" TO PTPE
MOVE "YYYYY" TO CTY
EXEC SQL DECLARE ZZ CURSOR FOR
SELECT DISTINCT PTYPE, CITY
FROM PROJ
GROUP BY PTYPE, CITY
HAVING AVG(BUDGET) > 21000 END-EXEC
EXEC SQL OPEN ZZ END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "The correct answers are: (in any order)"
DISPLAY " PTPE = Code, CTY = Vienna"
DISPLAY " PTPE = Design, CTY = Deale"
DISPLAY " PTPE = Test, CTY = Tampa"
DISPLAY " 3 rows selected"
DISPLAY " "
DISPLAY "Your answers are:"
MOVE 1 TO i
PERFORM P48 UNTIL i > 4
DISPLAY " ", count2 " rows selected"
DISPLAY " "
EXEC SQL CLOSE ZZ END-EXEC
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 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 *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0442','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml075.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0442','fail','PCO') END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"=================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0442 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN.
* **** Procedures for PERFORM statements
P50.
EXEC SQL 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.
EXEC SQL 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.
EXEC SQL 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.
EXEC SQL 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.12 Sekunden
(vorverarbeitet)
¤
|
Haftungshinweis
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.
|