* Standard COBOL (file "DML058.SCO") calling SQL * procedures in file "DML058.MCO"
**************************************************************** * * COMMENT SECTION * * DATE 1988/04/28 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. * * DML058.SCO * WRITTEN BY: SUN DAJUN * TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE * * THIS ROUTINE TESTS THE COMMIT,ROLLBACK AND UPDATE STATEMENT * IN THE LANGUAGE OF SQL. THE FORMAT: * COMMIT WORK * * ROLLBACK WORK * * UPDATE <table name> * SET <set clause:searched>({,<set clause>}...) * (WHERE <search condition>) * * REFERENCES * AMERICAN NATIONAL STANDARD database language - SQL * X3.135-1989 * * SECTION 6.6 <unique constraint definition> * SECTION 8.7 <insert statement> * SECTION 8.10 <select statement> * SECTION 8.12 <update statement: searched> * ****************************************************************
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, dml058.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 TEST0251 *******************
DISPLAY" TEST0251 " DISPLAY" COMMIT WORK " DISPLAY" reference X3.135-1989 section 8.2 General
- " Rules. 3" DISPLAY" - - - - - - - - - - - - - - - - - - - - - " DISPLAY" " DISPLAY" DELETE FROM STAFF1;" DISPLAY" " DISPLAY" INSERT INTO STAFF1" DISPLAY" SELECT * FROM STAFF;" DISPLAY" " DISPLAY" SELECT COUNT(*) INTO :ii" DISPLAY" FROM STAFF1;" DISPLAY" " DISPLAY" INSERT INTO STAFF1" DISPLAY" VALUES ('E9','Tom',50,'London');" DISPLAY" " DISPLAY" UPDATE STAFF1" DISPLAY" SET GRADE = 40" DISPLAY" WHERE EMPNUM = 'E2';" DISPLAY" COMMIT WORK;" DISPLAY" " DISPLAY" DELETE FROM STAFF1;" DISPLAY" ROLLBACK WORK; " DISPLAY" " DISPLAY" SELECT COUNT(*) INTO :i" DISPLAY" FROM STAFF1" DISPLAY" WHERE GRADE > 12;"
MOVE 0 TO ii MOVE 0 TO i * EXEC SQL DELETE FROM STAFF1; CALL"SUB1"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL INSERT INTO STAFF1 * SELECT * FROM STAFF END-EXEC CALL"SUB2"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL SELECT COUNT(*) INTO :ii * FROM STAFF1 END-EXEC CALL"SUB3"USING SQLCODE ii MOVE SQLCODE TO SQL-COD * EXEC SQL INSERT INTO STAFF1 * VALUES ('E9','Tom',50,'London') END-EXEC CALL"SUB4"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL UPDATE STAFF1 * SET GRADE = 40 * WHERE EMPNUM = 'E2' END-EXEC CALL"SUB5"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL COMMIT WORK; CALL"SUB6"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL DELETE FROM STAFF1; CALL"SUB7"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL ROLLBACK WORK; CALL"SUB8"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL SELECT COUNT(*) INTO :i * FROM STAFF1 * WHERE GRADE > 12 END-EXEC CALL"SUB9"USING SQLCODE i MOVE SQLCODE TO SQL-COD * EXEC SQL DELETE FROM STAFF1; CALL"SUB10"USING SQLCODE MOVE SQLCODE TO SQL-COD DISPLAY" The correct answer is :" DISPLAY" ii is 5" DISPLAY" i is 4" DISPLAY" Your answer is :" DISPLAY" ii is ", ii DISPLAY" i is ", i if (ii = 5 AND i = 4) then * EXEC SQL INSERT INTO TESTREPORT * VALUES('0251','pass','MCO') END-EXEC CALL"SUB11"USING SQLCODE MOVE SQLCODE TO SQL-COD DISPLAY" *** pass *** " else * EXEC SQL INSERT INTO TESTREPORT * VALUES('0251','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB12"USING SQLCODE MOVE SQLCODE TO SQL-COD DISPLAY" dml058.sco *** fail *** " END-IF DISPLAY"================================================"
DISPLAY" " * EXEC SQL COMMIT WORK; CALL"SUB13"USING SQLCODE MOVE SQLCODE TO SQL-COD **************** END TEST 0251 **********
******************** BEGIN TEST0252 *******************
DISPLAY" TEST0252 " DISPLAY" ROLLBACK WORK " DISPLAY" reference X3.135-1989 section 8.9 Gerneral
- " Rules 1" DISPLAY" - - - - - - - - - - - - - - - - - - - - - " DISPLAY" " DISPLAY" DELETE FROM STAFF1;" DISPLAY" " DISPLAY" INSERT INTO STAFF1" DISPLAY" SELECT * FROM STAFF;" DISPLAY" COMMIT WORK;" DISPLAY" " DISPLAY" UPDATE STAFF1" DISPLAY" SET EMPNUM = 'E9'" DISPLAY" WHERE EMPNUM = 'E1';" DISPLAY" " DISPLAY" ROLLBACK WORK;" DISPLAY" " DISPLAY" SELECT COUNT(*) INTO :i" DISPLAY" FROM STAFF1" DISPLAY" WHERE EMPNUM = 'E1';" MOVE 0 TO i * EXEC SQL DELETE FROM STAFF1; CALL"SUB14"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL INSERT INTO STAFF1 * SELECT * FROM STAFF END-EXEC CALL"SUB15"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL COMMIT WORK; CALL"SUB16"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL INSERT INTO STAFF1 * VALUES ('E10','Tom',50,'London') END-EXEC CALL"SUB17"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL UPDATE STAFF1 * SET GRADE = 40 * WHERE EMPNUM = 'E1' END-EXEC CALL"SUB18"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL DELETE FROM STAFF1 * WHERE EMPNUM = 'E2' END-EXEC CALL"SUB19"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL ROLLBACK WORK; CALL"SUB20"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL SELECT SUM(GRADE) INTO :i * FROM STAFF1 END-EXEC CALL"SUB21"USING SQLCODE i MOVE SQLCODE TO SQL-COD * EXEC SQL DELETE FROM STAFF1; CALL"SUB22"USING SQLCODE MOVE SQLCODE TO SQL-COD DISPLAY" The correct answer is :" DISPLAY" i is 60" DISPLAY" Your answer is :" DISPLAY" i is ", i if (i = 60) then * EXEC SQL INSERT INTO TESTREPORT * VALUES('0252','pass','MCO') END-EXEC CALL"SUB23"USING SQLCODE MOVE SQLCODE TO SQL-COD DISPLAY" *** pass *** " else * EXEC SQL INSERT INTO TESTREPORT * VALUES('0252','fail','MCO') END-EXEC ADD 1 TO errcnt CALL"SUB24"USING SQLCODE MOVE SQLCODE TO SQL-COD DISPLAY" dml058.sco *** fail *** " END-IF DISPLAY"================================================"
DISPLAY" " * EXEC SQL COMMIT WORK; CALL"SUB25"USING SQLCODE MOVE SQLCODE TO SQL-COD **************** END TEST 0252 **********
* See INSERTs in program BASETAB.SCO * INSERT INTO UPUNIQ VALUES(1,'A') * INSERT INTO UPUNIQ VALUES(2,'B') * INSERT INTO UPUNIQ VALUES(3,'C') * INSERT INTO UPUNIQ VALUES(4,'D') * INSERT INTO UPUNIQ VALUES(6,'F') * INSERT INTO UPUNIQ VALUES(8,'H')
******************** BEGIN TEST0253 *******************
*Comment -- This test does not requires deferred integrity * constraint checking, but has the same effect as * SET NUMKEY = NUMKEY + 1
DISPLAY" " DISPLAY" DECLARE SUN CURSOR " DISPLAY" FOR SELECT NUMKEY FROM UPUNIQ" DISPLAY" ORDER BY NUMKEY DESC;" DISPLAY" " DISPLAY" FETCH SUN INTO :jj;" DISPLAY" " DISPLAY" UPDATE UPUNIQ" DISPLAY" SET NUMKEY = :jj + 1 " DISPLAY" WHERE NUMKEY = :jj;" DISPLAY" " * EXEC SQL DECLARE SUN CURSOR * FOR SELECT NUMKEY FROM UPUNIQ * ORDER BY NUMKEY DESC END-EXEC
* EXEC SQL OPEN SUN; CALL"SUB26"USING SQLCODE MOVE SQLCODE TO SQL-COD
MOVE 0 TO i PERFORM P50 UNTIL i > 9 * EXEC SQL CLOSE SUN; CALL"SUB27"USING SQLCODE MOVE SQLCODE TO SQL-COD MOVE 0 TO i MOVE 0 TO ii * EXEC SQL SELECT MAX(NUMKEY), MIN(NUMKEY) * INTO :i,:ii * FROM UPUNIQ END-EXEC CALL"SUB28"USING SQLCODE i ii MOVE SQLCODE TO SQL-COD DISPLAY" The max numkey in table UPUNIQ is ", i ". " DISPLAY" The min numkey in table UPUNIQ is ", ii ". "
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.