* Standard COBOL (file "DML060.SCO") calling SQL * procedures in file "DML060.MCO"
**************************************************************** * * COMMENT SECTION * * DATE 1989/07/21 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. * * DML060.SCO * WRITTEN BY: SUN DAJUN * TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL 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 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, dml060.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 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 * EXEC SQL DECLARE SUN CURSOR * FOR SELECT COL1, COL2 * FROM VTABLE * WHERE (:int3 * (COL3 - COL2)) BETWEEN 5 AND 200 * ORDER BY COL1 END-EXEC * EXEC SQL OPEN SUN; CALL"SUB1"USING SQLCODE int3 MOVE SQLCODE TO SQL-COD DISPLAY" The correct answer is :" DISPLAY" 10, 20" DISPLAY" 100, 200" DISPLAY" Your answer is :"
MOVE 0 TO flag
* EXEC SQL FETCH SUN INTO :int1,:int2; CALL"SUB2"USING SQLCODE int1 int2 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
* EXEC SQL FETCH SUN INTO :int1,:int2; CALL"SUB3"USING SQLCODE int1 int2 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
* EXEC SQL CLOSE SUN; CALL"SUB4"USING SQLCODE MOVE SQLCODE TO SQL-COD
if (flag = 0) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0261','pass','MCO') END-EXEC CALL"SUB5"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0261','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB6"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF DISPLAY"==============================================="
******************** 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" " * EXEC SQL UPDATE VTABLE * SET COL1 = 1 * WHERE COL1 = 0 END-EXEC CALL"SUB8"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL DECLARE SUN1 CURSOR * FOR SELECT COL1, COL2 * FROM VTABLE * WHERE (COL3 * COL2 / COL1) > ALL * (SELECT HOURS FROM WORKS) * OR -(COL3 * COL2 /COL1) > ANY * (SELECT HOURS FROM WORKS) * ORDER BY COL1 END-EXEC * EXEC SQL OPEN SUN1; CALL"SUB9"USING SQLCODE MOVE SQLCODE TO SQL-COD DISPLAY" The correct answer is :" DISPLAY" 100, 200" DISPLAY" 1000, -2000" DISPLAY" Your answer is :"
MOVE 0 TO flag
* EXEC SQL FETCH SUN1 INTO :int1,:int2; CALL"SUB10"USING SQLCODE int1 int2 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
* EXEC SQL FETCH SUN1 INTO :int1,:int2; CALL"SUB11"USING SQLCODE int1 int2 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
* EXEC SQL CLOSE SUN1; CALL"SUB12"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL ROLLBACK WORK; CALL"SUB13"USING SQLCODE MOVE SQLCODE TO SQL-COD
if (flag = 0) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0262','pass','MCO') END-EXEC CALL"SUB14"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0262','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB15"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF DISPLAY"==============================================="
******************** 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" " * EXEC SQL DECLARE SUN2 CURSOR * FOR SELECT COL1, (COL3 * COL2 /COL1 - COL2 + 10) * FROM VTABLE * WHERE COL1 > 0 * ORDER BY 2 END-EXEC * EXEC SQL OPEN SUN2; CALL"SUB17"USING SQLCODE 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
* EXEC SQL FETCH SUN2 INTO :int1,:int2; CALL"SUB18"USING SQLCODE int1 int2 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
* EXEC SQL FETCH SUN2 INTO :int1,:int2; CALL"SUB19"USING SQLCODE int1 int2 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
* EXEC SQL FETCH SUN2 INTO :int1,:int2; CALL"SUB20"USING SQLCODE int1 int2 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
* EXEC SQL CLOSE SUN2; CALL"SUB21"USING SQLCODE MOVE SQLCODE TO SQL-COD
if (flag = 0) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0263','pass','MCO') END-EXEC CALL"SUB22"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0263','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB23"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF DISPLAY"==============================================="
*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" "
* EXEC SQL INSERT INTO WORKS * VALUES ('E3','P4',50) END-EXEC CALL"SUB34"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL DECLARE DOVE CURSOR * FOR SELECT EMPNUM,PNUM,HOURS * FROM SUBSP END-EXEC * FOR UPDATE OF PNUM;
* EXEC SQL OPEN DOVE; CALL"SUB35"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH DOVE INTO :EMPNO1,:PNO1,:HOURS1; CALL"SUB36"USING SQLCODE EMPNO1 PNO1 HOURS1 MOVE SQLCODE TO SQL-COD
******************** END TEST0266 *******************
******************** BEGIN TEST0267 *******************
DISPLAY" Update compound key, interim uniqueness conflict" DISPLAY"Reference X3.135-1989 sections 6.6 GR2 and 8.12 GR2
- " " DISPLAY" ------------------------------------------ " DISPLAY" TEST0267 " DISPLAY" Reference 5.9 General Rules )" DISPLAY" - - - - - - - - - - - - - - - - - - - - - " DISPLAY" UPDATE WORKS1" DISPLAY" SET PNUM = EMPNUM, EMPNUM = PNUM;" * EXEC SQL DECLARE PANDA CURSOR * FOR SELECT DISTINCT PX.PNUM,PY.PNUM * FROM WORKS PX, WORKS PY * ORDER BY 2 DESC END-EXEC
* EXEC SQL DELETE FROM WORKS1; CALL"SUB45"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL OPEN PANDA; CALL"SUB46"USING SQLCODE MOVE SQLCODE TO SQL-COD MOVE 1 TO ii PERFORM P50 UNTIL ii > 36 * EXEC SQL CLOSE PANDA; CALL"SUB47"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE i = -1 * EXEC SQL UPDATE WORKS1 * SET PNUM = EMPNUM, EMPNUM = PNUM END-EXEC CALL"SUB48"USING SQLCODE MOVE SQLCODE TO SQL-COD MOVE SQLCODE TO i MOVE 0 TO HOURS1 * EXEC SQL SELECT COUNT(*) * INTO :HOURS1 FROM WORKS1 * WHERE EMPNUM = 'P1' AND HOURS > 30 END-EXEC CALL"SUB49"USING SQLCODE HOURS1 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
* EXEC SQL CLOSE PANDA; CALL"SUB50"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL ROLLBACK WORK; CALL"SUB51"USING SQLCODE MOVE SQLCODE TO SQL-COD
if (i = 0 AND HOURS1 = 6) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0267','pass','MCO') END-EXEC CALL"SUB52"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml060.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0267','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB53"USING SQLCODE MOVE SQLCODE TO SQL-COD END-IF DISPLAY"==============================================="
******************** END TEST0267 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
P50. * EXEC SQL FETCH PANDA INTO :PNO1,:PNO2; CALL"SUB55"USING SQLCODE PNO1 PNO2 MOVE SQLCODE TO SQL-COD * EXEC SQL INSERT INTO WORKS1 * VALUES(:PNO1,:PNO2,:ii) END-EXEC CALL"SUB56"USING SQLCODE PNO1 PNO2 ii MOVE SQLCODE TO SQL-COD ADD 1 TO ii
.
¤ Dauer der Verarbeitung: 0.17 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.