**************************************************************** * * COMMENT SECTION * * DATE 1987/08/21 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. * * DML022.PCO * WRITTEN BY: HU YANPING * TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE * * THIS ROUTINE TESTS THE SUBQUERY OF THE SQL LANGUAGE. * * REFERENCES * AMERICAN NATIONAL STANDARD database language - SQL * X3.135-1989 * * SECTION 5.24 <subquery> * ****************************************************************
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, dml022.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 TEST0096 *******************
DISPLAY" TEST0096 " DISPLAY" Reference ANSI X3.135-1989 5.24 GR 1) " DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY" *** Use of function in subquery. " DISPLAY" *** SELECT EMPNUM " DISPLAY" *** FROM STAFF " DISPLAY" *** WHERE GRADE < " DISPLAY" *** (SELECT MAX(GRADE) " DISPLAY" *** FROM STAFF) " EXECSQL DECLARE S5 CURSOR FOR SELECT EMPNUM FROM STAFF
WHERE GRADE <
(SELECT MAX(GRADE) FROM STAFF) END-EXEC EXECSQLOPEN S5 END-EXEC MOVE SQLCODE TO SQL-COD MOVE 0 TO i if (SQLCODE = 0) then DISPLAY" EMPNUM " END-IF MOVE 1 TO ii PERFORM P50 UNTIL ii > 19 EXECSQLCLOSE S5 END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY" Here i should be 3; i=", i " " if (i = 3) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0096','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0096','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 TEST0096 ******************* ******************** BEGIN TEST0097 *******************
DISPLAY" TEST0097 " DISPLAY" Reference ANSI X3.135-1989 5.24 GR 1) " DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY" *** SELECT * " DISPLAY" *** FROM STAFF " DISPLAY" *** WHERE GRADE <= " DISPLAY" *** (SELECT AVG(GRADE)-1 " DISPLAY" *** FROM STAFF) " EXECSQL DECLARE S6 CURSOR FOR SELECT * FROM STAFF
WHERE GRADE <=
(SELECT AVG(GRADE)-1 FROM STAFF) END-EXEC EXECSQLOPEN S6 END-EXEC MOVE SQLCODE TO SQL-COD MOVE 0 TO i if (SQLCODE = 0) then DISPLAY"EMPNUM SNAME GRADE CITY " END-IF MOVE 1 TO ii PERFORM P49 UNTIL ii > 19 EXECSQLCLOSE S6 END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY" Here i should be 1; i=", i " " if (i = 1) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0097','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0097','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 TEST0097 ******************* ******************** BEGIN TEST0098 *******************
DISPLAY" TEST0098 " DISPLAY" Reference ANSI X3.135-1989 5.24 GR 2) " DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY" *** Simple subquery. " DISPLAY" *** SELECT EMPNAME " DISPLAY" *** FROM STAFF " DISPLAY" *** WHERE EMPNUM IN " DISPLAY" *** (SELECT EMPNUM " DISPLAY" *** FROM WORKS " DISPLAY" *** WHERE PNUM = 'P2') " EXECSQL DECLARE S1 CURSOR FOR SELECT EMPNAME FROM STAFF
WHERE EMPNUM IN
(SELECT EMPNUM FROM WORKS
WHERE PNUM = 'P2') END-EXEC EXECSQLOPEN S1 END-EXEC MOVE SQLCODE TO SQL-COD MOVE 0 TO i if (SQLCODE = 0) then DISPLAY"EMPNAME " END-IF MOVE 1 TO ii PERFORM P48 UNTIL ii > 19 EXECSQLCLOSE S1 END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY" Here i should be 4; i=", i " " if (i = 4) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0098','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0098','fail','PCO') END-EXEC ADD 1 TO errcnt MOVE SQLCODE TO SQL-COD END-IF
DISPLAY" ***Subquery with multiple levels of
- " nesting. " DISPLAY" *** SELECT EMPNAME " DISPLAY" *** FROM STAFF " DISPLAY" *** WHERE EMPNUM IN " DISPLAY" *** (SELECT EMPNUM " DISPLAY" *** FROM WORKS " DISPLAY" *** WHERE PNUM IN " DISPLAY" *** (SELECT PNUM " DISPLAY" *** FROM PROJ " DISPLAY" *** WHERE PTYPE = 'Design')) " EXECSQL DECLARE S2 CURSOR FOR SELECT EMPNAME FROM STAFF
WHERE EMPNUM IN
(SELECT EMPNUM FROM WORKS
WHERE PNUM IN
(SELECT PNUM FROM PROJ
WHERE PTYPE = 'Design')) END-EXEC EXECSQLOPEN S2 END-EXEC MOVE SQLCODE TO SQL-COD MOVE 0 TO i if (SQLCODE = 0) then DISPLAY"EMPNAME " END-IF MOVE 1 TO ii PERFORM P47 UNTIL ii > 19 EXECSQLCLOSE S2 END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY" Here i should be 3; i=", i " " if (i = 3) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0099','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0099','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 TEST0099 ******************* ******************** BEGIN TEST0100 *******************
DISPLAY" TEST0100 " DISPLAY" Reference ANSI X3.135-1989 5.24 GR 2) " DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY"*** SELECT EMPNUM, EMPNAME " DISPLAY"*** FROM STAFF " DISPLAY"*** WHERE EMPNUM IN " DISPLAY"*** (SELECT EMPNUM " DISPLAY"*** FROM WORKS " DISPLAY"*** WHERE PNUM IN " DISPLAY"*** (SELECT PNUM " DISPLAY"*** FROM PROJ " DISPLAY"*** WHERE PTYPE IN " DISPLAY"*** (SELECT PTYPE " DISPLAY"*** FROM PROJ " DISPLAY"*** WHERE PNUM IN " DISPLAY"*** (SELECT PNUM " DISPLAY"*** FROM WORKS " DISPLAY"*** WHERE EMPNUM IN " DISPLAY"*** (SELECT EMPNUM " DISPLAY"*** FROM WORKS " DISPLAY"*** WHERE PNUM IN " DISPLAY"*** (SELECT PNUM " DISPLAY"*** FROM PROJ " DISPLAY"*** WHERE PTYPE =
- " 'Design')))))) " EXECSQL DECLARE S3 CURSOR FOR SELECT EMPNUM, EMPNAME FROM STAFF
WHERE EMPNUM IN
(SELECT EMPNUM FROM WORKS
WHERE PNUM IN
(SELECT PNUM FROM PROJ
WHERE PTYPE IN
(SELECT PTYPE FROM PROJ
WHERE PNUM IN
(SELECT PNUM FROM WORKS
WHERE EMPNUM IN
(SELECT EMPNUM FROM WORKS
WHERE PNUM IN
(SELECT PNUM FROM PROJ
WHERE PTYPE = 'Design')))))) END-EXEC EXECSQLOPEN S3 END-EXEC MOVE SQLCODE TO SQL-COD MOVE 0 TO i if (SQLCODE = 0) then DISPLAY"EMPNUM EMPNAME " END-IF MOVE 1 TO ii PERFORM P46 UNTIL ii > 19 EXECSQLCLOSE S3 END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY" Here i should be 4; i=", i " " if (i = 4) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0100','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0100','fail','PCO') END-EXEC ADD 1 TO errcnt MOVE SQLCODE TO SQL-COD END-IF
DISPLAY "====================================================" EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
******************** END TEST0100 ******************* ******************** BEGIN TEST0101 *******************
DISPLAY" TEST0101 " DISPLAY" Reference ANSI X3.135-1989 5.24 GR 3) " DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY" *** use of GROUP BY in subquery. " DISPLAY" *** SELECT EMPNUM,PNUM " DISPLAY" *** FROM WORKS " DISPLAY" *** WHERE HOURS <= ALL " DISPLAY" *** (SELECT AVG(HOURS) " DISPLAY" *** FROM WORKS " DISPLAY" *** GROUP BY PNUM) "
EXECSQL DECLARE S22 CURSOR FOR SELECT EMPNUM,PNUM FROM WORKS
WHERE HOURS <= ALL
(SELECT AVG(HOURS) FROM WORKS
GROUP BY PNUM) END-EXEC EXECSQLOPEN S22 END-EXEC MOVE SQLCODE TO SQL-COD MOVE 0 TO i if (SQLCODE = 0) then DISPLAY" EMPNUM PNUM " END-IF MOVE 1 TO ii PERFORM P45 UNTIL ii > 19 EXECSQLCLOSE S22 END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY" Here i should be 2; i=", i " " if (i = 2) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0101','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0101','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 TEST0101 ******************* ******************** BEGIN TEST0102 *******************
DISPLAY" TEST0102 " DISPLAY" Reference ANSI X3.135-1989 5.24 GR 3) " DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY" *** SELECT DISTINCT EMPNUM " DISPLAY" *** FROM WORKS WORKSX " DISPLAY" *** WHERE NOT EXISTS " DISPLAY" *** (SELECT * " DISPLAY" *** FROM WORKS WORKSY " DISPLAY" *** WHERE EMPNUM = 'E2' " DISPLAY" *** AND NOT EXISTS " DISPLAY" *** (SELECT * " DISPLAY" *** FROM WORKS WORKSZ " DISPLAY" *** WHERE WORKSZ.EMPNUM =
- " WORKSX.EMPNUM " DISPLAY" *** AND WORKSZ.PNUM =
- " WORKSY.PNUM)) " EXECSQL DECLARE S11 CURSOR FOR SELECT DISTINCT EMPNUM FROM WORKS WORKSX
WHERE NOT EXISTS
(SELECT * FROM WORKS WORKSY
WHERE EMPNUM = 'E2' ANDNOT EXISTS
(SELECT * FROM WORKS WORKSZ
WHERE WORKSZ.EMPNUM = WORKSX.EMPNUM AND WORKSZ.PNUM = WORKSY.PNUM)) END-EXEC EXECSQLOPEN S11 END-EXEC MOVE SQLCODE TO SQL-COD MOVE 0 TO i if (SQLCODE = 0) then DISPLAY"EMPNUM " END-IF MOVE 1 TO ii PERFORM P44 UNTIL ii > 19 EXECSQLCLOSE S11 END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY" Here i should be 2; i=", i " " if (i = 2) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0102','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0102','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 TEST0102 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
P50. EXECSQL FETCH S5 INTO
:EMPNO1 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then DISPLAY" ", EMPNO1 COMPUTE i = i + 1 END-IF ADD 1 TO ii
.
P49. EXECSQL FETCH S6 INTO
:EMPNO1,:EMPNA1,:GRADE1,:SCITY END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNO1 " ", EMPNA1 " ", GRADE1 " ",
SCITY COMPUTE i = i + 1 END-IF ADD 1 TO ii
.
P48. EXECSQL FETCH S1 INTO
:EMPNA1 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNA1 COMPUTE i = i + 1 END-IF ADD 1 TO ii
.
P47. EXECSQL FETCH S2 INTO
:EMPNA1 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNA1 COMPUTE i = i + 1 END-IF ADD 1 TO ii
.
P46. EXECSQL FETCH S3 INTO
:EMPNO1,:EMPNA1 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNO1 " ", EMPNA1 COMPUTE i = i + 1 END-IF ADD 1 TO ii
.
P45. EXECSQL FETCH S22 INTO :WEMP,:WPNUM END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then DISPLAY" ", WEMP " ", WPNUM COMPUTE i = i + 1 END-IF ADD 1 TO ii
.
P44. EXECSQL FETCH S11 INTO
:EMPNO1 END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNO1 COMPUTE i = i + 1 END-IF ADD 1 TO ii
.
¤ 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.0.13Bemerkung:
(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.