* 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"USINGSQLCODE uidx MOVESQLCODETO 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"USINGSQLCODE int3 MOVESQLCODETO 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"USINGSQLCODE int1 int2 MOVESQLCODETO 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"USINGSQLCODE int1 int2 MOVESQLCODETO 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"USINGSQLCODE MOVESQLCODETO SQL-COD
if (flag = 0) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0261','pass','MCO') END-EXEC CALL"SUB5"USINGSQLCODE MOVESQLCODETO SQL-COD else DISPLAY" dml060.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0261','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB6"USINGSQLCODE MOVESQLCODETO 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"USINGSQLCODE MOVESQLCODETO 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"USINGSQLCODE MOVESQLCODETO 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"USINGSQLCODE int1 int2 MOVESQLCODETO 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"USINGSQLCODE int1 int2 MOVESQLCODETO SQL-COD DISPLAY" ", int1 ", ", int2 if (int1 = 1000 AND int2 = -2000) then MOVE flag TO flag else MOVE 1 TO flag END-IF
******************** 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"USINGSQLCODE MOVESQLCODETO 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"USINGSQLCODE int1 int2 MOVESQLCODETO 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"USINGSQLCODE int1 int2 MOVESQLCODETO 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"USINGSQLCODE int1 int2 MOVESQLCODETO 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"USINGSQLCODE MOVESQLCODETO SQL-COD
if (flag = 0) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0263','pass','MCO') END-EXEC CALL"SUB22"USINGSQLCODE MOVESQLCODETO SQL-COD else DISPLAY" dml060.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0263','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB23"USINGSQLCODE MOVESQLCODETO 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"USINGSQLCODE MOVESQLCODETO 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"USINGSQLCODE MOVESQLCODETO SQL-COD
* EXEC SQL FETCH DOVE INTO :EMPNO1,:PNO1,:HOURS1; CALL"SUB36"USINGSQLCODE EMPNO1 PNO1 HOURS1 MOVESQLCODETO SQL-COD
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.