**************************************************************** * * 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
MOVE0TO 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 <subquery> 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 MOVESQLCODETO SQL-COD MOVE0TO i if (SQLCODE = 0) then DISPLAY" EMPNUM " END-IF MOVE1TO ii PERFORM P50 UNTIL ii > 19 EXECSQLCLOSE S5 END-EXEC MOVESQLCODETO SQL-COD
DISPLAY" Here i should be 3; i=", i " " if (i = 3) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0096','pass','PCO') END-EXEC MOVESQLCODETO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0096','fail','PCO') END-EXEC ADD1TO errcnt MOVESQLCODETO 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 MOVESQLCODETO SQL-COD MOVE0TO i if (SQLCODE = 0) then DISPLAY"EMPNAME " END-IF MOVE1TO ii PERFORM P47 UNTIL ii > 19 EXECSQLCLOSE S2 END-EXEC MOVESQLCODETO SQL-COD
DISPLAY" Here i should be 3; i=", i " " if (i = 3) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0099','pass','PCO') END-EXEC MOVESQLCODETO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0099','fail','PCO') END-EXEC ADD1TO errcnt MOVESQLCODETO SQL-COD END-IF
******************** END TEST0099 ******************* ******************** BEGIN TEST0100 *******************
DISPLAY" TEST0100 " DISPLAY" Reference ANSI X3.135-1989 5.24 <subquery> 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 MOVESQLCODETO SQL-COD MOVE0TO i if (SQLCODE = 0) then DISPLAY"EMPNUM EMPNAME " END-IF MOVE1TO ii PERFORM P46 UNTIL ii > 19 EXECSQLCLOSE S3 END-EXEC MOVESQLCODETO SQL-COD
DISPLAY" Here i should be 4; i=", i " " if (i = 4) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0100','pass','PCO') END-EXEC MOVESQLCODETO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0100','fail','PCO') END-EXEC ADD1TO errcnt MOVESQLCODETO SQL-COD END-IF
DISPLAY "====================================================" EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
******************** END TEST0100 ******************* ******************** BEGIN TEST0101 *******************
DISPLAY" TEST0101 " DISPLAY" Reference ANSI X3.135-1989 5.24 <subquery> 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 MOVESQLCODETO SQL-COD MOVE0TO i if (SQLCODE = 0) then DISPLAY" EMPNUM PNUM " END-IF MOVE1TO ii PERFORM P45 UNTIL ii > 19 EXECSQLCLOSE S22 END-EXEC MOVESQLCODETO SQL-COD
DISPLAY" Here i should be 2; i=", i " " if (i = 2) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0101','pass','PCO') END-EXEC MOVESQLCODETO SQL-COD else DISPLAY" dml022.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0101','fail','PCO') END-EXEC ADD1TO errcnt MOVESQLCODETO SQL-COD END-IF
******************** END TEST0102 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
P50. EXECSQL FETCH S5 INTO
:EMPNO1 END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then DISPLAY" ", EMPNO1 COMPUTE i = i + 1 END-IF ADD1TO ii
.
P49. EXECSQL FETCH S6 INTO
:EMPNO1,:EMPNA1,:GRADE1,:SCITY END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNO1 " ", EMPNA1 " ", GRADE1 " ",
SCITY COMPUTE i = i + 1 END-IF ADD1TO ii
.
P48. EXECSQL FETCH S1 INTO
:EMPNA1 END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNA1 COMPUTE i = i + 1 END-IF ADD1TO ii
.
P47. EXECSQL FETCH S2 INTO
:EMPNA1 END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNA1 COMPUTE i = i + 1 END-IF ADD1TO ii
.
P46. EXECSQL FETCH S3 INTO
:EMPNO1,:EMPNA1 END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNO1 " ", EMPNA1 COMPUTE i = i + 1 END-IF ADD1TO ii
.
P45. EXECSQL FETCH S22 INTO :WEMP,:WPNUM END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then DISPLAY" ", WEMP " ", WPNUM COMPUTE i = i + 1 END-IF ADD1TO ii
.
P44. EXECSQL FETCH S11 INTO
:EMPNO1 END-EXEC MOVESQLCODETO SQL-COD if (SQLCODE = 0) then DISPLAY EMPNO1 COMPUTE i = i + 1 END-IF ADD1TO ii
.
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-08)
¤
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 und die Messung sind noch experimentell.