* Standard COBOL (file "DML079.SCO") calling SQL * procedures in file "DML079.MCO". * STANDARD COBOL (file "DML079.SCO")
**************************************************************** * * COMMENT SECTION * * DATE 1991/10/10 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. * * DML079.SCO * WRITTEN BY: SHIRLEY HURWITZ * * THIS ROUTINE TESTS MISCELLANEOUS FEATURES. * * REFERENCES * AMERICAN NATIONAL STANDARD database language - SQL * X3.135-1989 * X3.168-1989 * ****************************************************************
MOVE"HU"TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx * EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO; CALL"SUB1"USING SQLCODE uidx MOVE SQLCODE TO SQL-COD if (uid NOT = uidx) then DISPLAY"ERROR: User ", uid " expected. User ", uidx "
- " connected" END-IF MOVE 0 TO errcnt DISPLAY"SQL Test Suite, V6.0, Module COBOL, dml079.sco" DISPLAY "59-byte ID" DISPLAY"TEd Version #"
*date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
******************** BEGIN TEST0451 *******************
DISPLAY"==============================================" DISPLAY" TEST0451 " DISPLAY" UNIQUEness is case sensitive " DISPLAY"X3.135-1989 Sec. 4.2.1 Character strings " DISPLAY"X3.135-1989 Sec. 5.1 Format " DISPLAY" - - - - - - - - - - - - - - - - - - -"
MOVE 0 TO i
* EXEC SQL UPDATE STAFF SET EMPNUM = 'e2' * WHERE EMPNUM = 'E4'; CALL"SUB2"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 1. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
* EXEC SQL INSERT INTO STAFF(EMPNUM) * VALUES ('E1'); CALL"SUB3"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 2. SQLCODE less than 0 is a pass. SQLCODE = ",
SQL-COD
* EXEC SQL INSERT INTO STAFF(EMPNUM) * VALUES ('e1'); CALL"SUB4"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 3. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
* EXEC SQL UPDATE STAFF * SET EMPNUM = 'E1' WHERE EMPNUM = 'e1'; CALL"SUB5"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 4. SQLCODE less than 0 is a pass. SQLCODE = ",
SQL-COD
* EXEC SQL INSERT INTO WORKS (EMPNUM,PNUM) * VALUES ('e1','p2'); CALL"SUB6"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 5. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
* EXEC SQL INSERT INTO WORKS (EMPNUM,PNUM) * VALUES ('E1','p2'); CALL"SUB7"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 6. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
* EXEC SQL INSERT INTO WORKS (EMPNUM,PNUM) * VALUES ('E1','P2'); CALL"SUB8"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 7. SQLCODE less than 0 is a pass. SQLCODE = ",
SQL-COD
* EXEC SQL INSERT INTO WORKS (EMPNUM,PNUM) * VALUES ('e1', 'P2'); CALL"SUB9"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 8. SQLCODE = 0 is a pass. SQLCODE = ", SQL-COD
* EXEC SQL UPDATE WORKS * SET EMPNUM = 'E1' * WHERE PNUM = 'P5' AND EMPNUM = 'E4'; CALL"SUB10"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 9. SQLCODE less than 0 is a pass. SQLCODE = ",
SQL-COD
* EXEC SQL UPDATE WORKS * SET EMPNUM = 'e1' * WHERE PNUM = 'P5' AND EMPNUM = 'E4'; CALL"SUB11"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 10. SQLCODE = 0 is a pass. SQLCODE = ",
SQL-COD
* EXEC SQL UPDATE WORKS * SET PNUM = 'P4' * WHERE PNUM = 'P2' AND EMPNUM = 'E4'; CALL"SUB12"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then ADD 1 TO i END-IF DISPLAY" 11. SQLCODE less than 0 is a pass. SQLCODE =
- " ", SQL-COD
* EXEC SQL UPDATE WORKS * SET PNUM = 'p4' * WHERE PNUM = 'P2' AND EMPNUM = 'E4'; CALL"SUB13"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then ADD 1 TO i END-IF DISPLAY" 12. SQLCODE = 0 is a pass. SQLCODE = ",
SQL-COD
******************** END TEST0451 *******************
******************** BEGIN TEST0452 *******************
MOVE 0 TO i MOVE 0 TO j
DISPLAY" TEST0452 " DISPLAY" Order of precedence, Left to Right, in UNION
- " (ALL) " DISPLAY"X3.135-1989 sec. 8.3 GR 2) b) and
- " " DISPLAY" - - - - - - - - - - - - - - - - - - -"
DISPLAY" *** FOR (SELECT EMPNAME FROM STAFF )" DISPLAY" *** UNION " DISPLAY" *** SELECT EMPNAME FROM STAFF " DISPLAY" *** UNION ALL " DISPLAY" *** SELECT EMPNAME FROM STAFF"
DISPLAY" *** FOR (SELECT EMPNAME FROM STAFF )" DISPLAY" *** UNION ALL " DISPLAY" *** SELECT EMPNAME FROM STAFF " DISPLAY" *** UNION " DISPLAY" *** SELECT EMPNAME FROM STAFF"
* EXEC SQL DECLARE X1 CURSOR * FOR SELECT EMPNAME FROM STAFF * UNION * SELECT EMPNAME FROM STAFF * UNION ALL * SELECT EMPNAME FROM STAFF END-EXEC
* EXEC SQL DECLARE X2 CURSOR * FOR SELECT EMPNAME FROM STAFF * UNION ALL * SELECT EMPNAME FROM STAFF * UNION * SELECT EMPNAME FROM STAFF END-EXEC
* EXEC SQL OPEN X1; CALL"SUB18"USING SQLCODE MOVE SQLCODE TO SQL-COD
MOVE 1 TO ii PERFORM P50 UNTIL ii > 15
* EXEC SQL CLOSE X1; CALL"SUB19"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL OPEN X2; CALL"SUB20"USING SQLCODE MOVE SQLCODE TO SQL-COD
MOVE 1 TO jj PERFORM P49 UNTIL jj > 15
* EXEC SQL CLOSE X2; CALL"SUB21"USING SQLCODE MOVE SQLCODE TO SQL-COD
DISPLAY"The correct answer is i=10 and j=5 " DISPLAY"Your answer is i=", i " j=", j " " if ((i = 10) AND (j = 5)) then DISPLAY" *** pass ***" * EXEC SQL INSERT INTO TESTREPORT * VALUES('0452','pass','MCO'); CALL"SUB22"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml079.sco *** fail ***" * EXEC SQL INSERT INTO TESTREPORT * VALUES('0452','fail','MCO'); CALL"SUB23"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF
* EXEC SQL UPDATE PROJ * SET CITY = NULL WHERE PNAME = 'IRM'; CALL"SUB25"USING SQLCODE MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count1 * FROM PROJ * WHERE CITY IS NULL; CALL"SUB26"USING SQLCODE count1 MOVE SQLCODE TO SQL-COD if (count1 NOT = 1) then MOVE 1 TO flag1 DISPLAY"Failed to set city to NULL for IRM " END-IF
* EXEC SQL SELECT COUNT(*) INTO :count1 * FROM PROJ * WHERE CITY = ALL (SELECT CITY * FROM STAFF * WHERE EMPNUM = 'E8'); CALL"SUB27"USING SQLCODE count1 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count2 * FROM PROJ * WHERE CITY <> ALL (SELECT CITY * FROM STAFF * WHERE EMPNUM = 'E8'); CALL"SUB28"USING SQLCODE count2 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count3 * FROM PROJ * WHERE CITY = ANY (SELECT CITY * FROM STAFF * WHERE EMPNUM = 'E8'); CALL"SUB29"USING SQLCODE count3 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count4 * FROM PROJ * WHERE CITY <> ANY (SELECT CITY * FROM STAFF * WHERE EMPNUM = 'E8'); CALL"SUB30"USING SQLCODE count4 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count5 * FROM PROJ * WHERE CITY = SOME (SELECT CITY * FROM STAFF * WHERE EMPNUM = 'E8'); CALL"SUB31"USING SQLCODE count5 MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count6 * FROM PROJ * WHERE CITY <> SOME (SELECT CITY * FROM STAFF * WHERE EMPNUM = 'E8'); CALL"SUB32"USING SQLCODE count6 MOVE SQLCODE TO SQL-COD
if ((count1 NOT = 6) OR (count2 NOT = 6) OR (count3 NOT = 0)) then MOVE 1 TO flag1 END-IF
if ((count4 NOT = 0) OR (count5 NOT = 0) OR (count6 NOT = 0)) then MOVE 1 TO flag2 END-IF
if ((flag1 = 0) AND (flag2 = 0)) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0453','pass','MCO'); CALL"SUB34"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" dml079.sco *** fail *** " * EXEC SQL INSERT INTO TESTREPORT * VALUES('0453','fail','MCO'); CALL"SUB35"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF DISPLAY" " * EXEC SQL COMMIT WORK; CALL"SUB36"USING SQLCODE MOVE SQLCODE TO SQL-COD DISPLAY "=================================================="
******************** END TEST0453 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOPRUN.
* **** Procedures for PERFORM statements
P50. * EXEC SQL FETCH X1 INTO :EMPNM1; CALL"SUB37"USING SQLCODE EMPNM1 MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then MOVE ii TO i END-IF ADD 1 TO ii
.
P49. * EXEC SQL FETCH X2 INTO :EMPNM1; CALL"SUB38"USING SQLCODE EMPNM1 MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then MOVE jj TO j END-IF ADD 1 TO jj
.
¤ 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.12Bemerkung:
(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.