**************************************************************** * * COMMENT SECTION * * DATE 1989/07/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. * * DML060.PCO * WRITTEN BY: SUN DAJUN * TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE * * THIS ROUTINE TESTS THE SET FUNCTION SPECIFICATION IN * COMMON ELEMENTS OF THE SQL LANGUAGE. * * REFERENCES * AMERICAN NATIONAL STANDARD database language - SQL * X3.135-1989 * * SECTION 5.21 <where clause> * SECTION 5.9 <value expression> * ****************************************************************
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, dml060.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 TEST0261 *******************
DISPLAY" Computation in Where Clause " DISPLAY"Reference X3.135-1989 section 5.9 General Rules " DISPLAY" ------------------------------------------ " DISPLAY" TEST0261 " DISPLAY" Reference 5.9 General Rules )" DISPLAY" - - - - - - - - - - - - - - - - - - - - - " DISPLAY" " DISPLAY" DECLARE SUN CURSOR " DISPLAY" FOR SELECT COL1, COL2" DISPLAY" FROM VTABLE" DISPLAY" WHERE (:int3 * (COL3 - COL2)) BETWEEN 5
- " AND 200" DISPLAY" ORDER BY COL1;" DISPLAY" " MOVE 2 TO int3 EXECSQL DECLARE SUN CURSOR FORSELECT COL1, COL2 FROM VTABLE
WHERE (:int3 * (COL3 - COL2)) BETWEEN 5 AND 200 ORDERBY COL1 END-EXEC EXECSQLOPEN SUN END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" The correct answer is :" DISPLAY" 10, 20" DISPLAY" 100, 200" DISPLAY" Your answer is :"
MOVE 0 TO flag
EXECSQL FETCH SUN INTO :int1,:int2 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" ", int1 ", ", int2 if (int1 = 10 AND int2 = 20) then MOVE flag TO flag else MOVE 1 TO flag END-IF
EXECSQL FETCH SUN INTO :int1,:int2 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" ", int1 ", ", int2 if (int1 = 100 AND int2 = 200) then MOVE flag TO flag else MOVE 1 TO flag END-IF
EXECSQLCLOSE SUN END-EXEC MOVE SQLCODE TO SQL-COD
if (flag = 0) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0261','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0261','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 TEST0261 *******************
******************** BEGIN TEST0262 *******************
DISPLAY" Computation in Where Clause " DISPLAY"Reference X3.135-1989 section 5.9 General Rules " DISPLAY" ------------------------------------------ " DISPLAY" TEST0262 " DISPLAY" Reference 5.9 General Rules )" DISPLAY" - - - - - - - - - - - - - - - - - - - - - " DISPLAY" " DISPLAY" " DISPLAY" UPDATE VTABLE" DISPLAY" SET COL1 = 1" DISPLAY" WHERE COL1 = 0;" DISPLAY" " DISPLAY" DECLARE SUN1 CURSOR " DISPLAY" FOR SELECT COL1, COL2" DISPLAY" FROM VTABLE" DISPLAY" WHERE (COL3 * COL2 / COL1) > ALL" DISPLAY" (SELECT HOURS FROM WORKS)" DISPLAY" OR -(COL3 * COL2 /COL1) >
- " ANY" DISPLAY" (SELECT HOURS FROM WORKS)" DISPLAY" ORDER BY COL1;" DISPLAY" " EXECSQL UPDATE VTABLE SET COL1 = 1
WHERE COL1 = 0 END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL DECLARE SUN1 CURSOR FORSELECT COL1, COL2 FROM VTABLE
WHERE (COL3 * COL2 / COL1) > ALL
(SELECT HOURS FROM WORKS) OR -(COL3 * COL2 /COL1) > ANY
(SELECT HOURS FROM WORKS) ORDERBY COL1 END-EXEC EXECSQLOPEN SUN1 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" The correct answer is :" DISPLAY" 100, 200" DISPLAY" 1000, -2000" DISPLAY" Your answer is :"
MOVE 0 TO flag
EXECSQL FETCH SUN1 INTO :int1,:int2 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" ", int1 ", ", int2 if (int1 = 100 AND int2 = 200) then MOVE flag TO flag else MOVE 1 TO flag END-IF
EXECSQL FETCH SUN1 INTO :int1,:int2 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" ", int1 ", ", int2 if (int1 = 1000 AND int2 = -2000) then MOVE flag TO flag else MOVE 1 TO flag END-IF
EXECSQLCLOSE SUN1 END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
if (flag = 0) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0262','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0262','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 TEST0262 *******************
******************** BEGIN TEST0263 *******************
DISPLAY" Computation in ORDER BY " DISPLAY"Reference X3.135-1989 section 5.9 General Rules " DISPLAY" ------------------------------------------ " DISPLAY" TEST0263 " DISPLAY" Reference 5.9 General Rules )" DISPLAY" - - - - - - - - - - - - - - - - - - - - - " DISPLAY" " DISPLAY" FOR SELECT COL1, COL3 * COL2 /COL1 -
- " COL2 + 10" DISPLAY" FROM VTABLE" DISPLAY" WHERE COL1 > 0" DISPLAY" ORDER BY 2;" DISPLAY" " EXECSQL DECLARE SUN2 CURSOR FORSELECT COL1, (COL3 * COL2 /COL1 - COL2 + 10) FROM VTABLE
WHERE COL1 > 0 ORDERBY 2 END-EXEC EXECSQLOPEN SUN2 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" The correct answer is :" DISPLAY" 1000, -3990" DISPLAY" 10, 50" DISPLAY" 100, 410"
DISPLAY" Your answer is :" MOVE 0 TO flag
EXECSQL FETCH SUN2 INTO :int1,:int2 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" ", int1 ", ", int2 if (int1 = 1000 AND int2 = -3990) then MOVE flag TO flag else MOVE 1 TO flag END-IF
EXECSQL FETCH SUN2 INTO :int1,:int2 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" ", int1 ", ", int2 if (int1 = 10 AND int2 = 50) then MOVE flag TO flag else MOVE 1 TO flag END-IF
EXECSQL FETCH SUN2 INTO :int1,:int2 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" ", int1 ", ", int2 if (int1 = 100 AND int2 = 410) then MOVE flag TO flag else MOVE 1 TO flag END-IF
EXECSQLCLOSE SUN2 END-EXEC MOVE SQLCODE TO SQL-COD
if (flag = 0) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0263','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0263','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 TEST0263 *******************
******************** BEGIN TEST0265 *******************
*EXEC SQL CREATE VIEW SUBSP (EMPNUM,PNUM,HOURS) * AS SELECT EMPNUM,PNUM,HOURS * FROM WORKS * WHERE EMPNUM='E3' * WITH CHECK OPTION;
DISPLAY" " DISPLAY" INSERT INTO WORKS" DISPLAY" VALUES ('E3','P4',50);" DISPLAY" " DISPLAY" DECLARE DIPER CURSOR" DISPLAY" FOR SELECT EMPNUM,PNUM,HOURS" DISPLAY" FROM SUBSP;" DISPLAY" " DISPLAY" UPDATE SUBSP" DISPLAY" SET EMPNUM='E9'" DISPLAY" WHERE CURRENT OF DIPER;" DISPLAY" " EXECSQLINSERTINTO WORKS
VALUES ('E3','P4',50) END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL DECLARE DIPER CURSOR FORSELECT EMPNUM,PNUM,HOURS FROM SUBSP END-EXEC * FOR UPDATE OF EMPNUM;
EXECSQLOPEN DIPER END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL FETCH DIPER INTO :EMPNO1,:PNO1,:HOURS1 END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL UPDATE SUBSP SET EMPNUM='E9'
WHERE CURRENT OF DIPER END-EXEC MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO i EXECSQLCLOSE DIPER END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"The answer should be: i < 0 " DISPLAY" Your answer is :" DISPLAY" i = ", i " " if (i < 0) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0265','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0265','fail','PCO') END-EXEC ADD 1 TO errcnt MOVE SQLCODE TO SQL-COD END-IF DISPLAY"==================================================="
DISPLAY" "
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
******************** END TEST0265 *******************
******************** BEGIN TEST0266 *******************
*EXEC SQL CREATE VIEW SUBSP (EMPNUM,PNUM,HOURS) * AS SELECT EMPNUM,PNUM,HOURS * FROM WORKS * WHERE EMPNUM='E3' * WITH CHECK OPTION;
DISPLAY" " DISPLAY" INSERT INTO WORKS" DISPLAY" VALUES ('E3','P4',50);" DISPLAY" " DISPLAY" DECLARE DOVE CURSOR" DISPLAY" FOR SELECT EMPNUM,PNUM,HOURS" DISPLAY" FROM SUBSP;" DISPLAY" " DISPLAY" UPDATE SUBSP" DISPLAY" SET PNUM='P6'" DISPLAY" WHERE CURRENT OF DOVE;" DISPLAY" "
EXECSQLINSERTINTO WORKS
VALUES ('E3','P4',50) END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL DECLARE DOVE CURSOR FORSELECT EMPNUM,PNUM,HOURS FROM SUBSP END-EXEC * FOR UPDATE OF PNUM;
EXECSQLOPEN DOVE END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL FETCH DOVE INTO :EMPNO1,:PNO1,:HOURS1 END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL UPDATE SUBSP SET PNUM='P6'
WHERE CURRENT OF DOVE END-EXEC MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO i EXECSQLCLOSE DOVE END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"The answer should be: i < 0"" " DISPLAY" Your answer is :" DISPLAY" i = ", i " " if (i < 0) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0266','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0266','fail','PCO') END-EXEC ADD 1 TO errcnt MOVE SQLCODE TO SQL-COD END-IF DISPLAY"==================================================="
DISPLAY" "
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
******************** END TEST0266 *******************
******************** BEGIN TEST0267 *******************
EXECSQLDELETEFROM WORKS1 END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQLOPEN PANDA END-EXEC MOVE SQLCODE TO SQL-COD MOVE 1 TO ii PERFORM P50 UNTIL ii > 36 EXECSQLCLOSE PANDA END-EXEC MOVE SQLCODE TO SQL-COD COMPUTE i = -1 EXECSQL UPDATE WORKS1 SET PNUM = EMPNUM, EMPNUM = PNUM END-EXEC MOVE SQLCODE TO SQL-COD MOVE SQLCODE TO i MOVE 0 TO HOURS1 EXECSQLSELECTCOUNT(*) INTO :HOURS1 FROM WORKS1
WHERE EMPNUM = 'P1'AND HOURS > 30 END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY" The correct answer is :" DISPLAY" i = 0" DISPLAY" count1 = 6"
DISPLAY" Your answer is :"
DISPLAY" i = ", i
DISPLAY" count1 = ", HOURS1
EXECSQLCLOSE PANDA END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
if (i = 0 AND HOURS1 = 6) then DISPLAY" *** pass *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0267','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.pco *** fail *** " EXECSQLINSERTINTO TESTREPORT
VALUES('0267','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 TEST0267 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
P50. EXECSQL FETCH PANDA INTO :PNO1,:PNO2 END-EXEC MOVE SQLCODE TO SQL-COD EXECSQLINSERTINTO WORKS1
VALUES(:PNO1,:PNO2,:ii) END-EXEC MOVE SQLCODE TO SQL-COD ADD 1 TO ii
.
¤ Dauer der Verarbeitung: 0.18 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.