* Standard COBOL (file "MPA008.SCO") calling SQL * procedures in file "MPA008.MCO". * STANDARD COBOL (file "MPA008.SCO")
**************************************************************** * * COMMENT SECTION * * DATE 1992/07/31 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. * * MPA008.SCO * WRITTEN BY: David W. Flater * * THIS PROGRAM IS PART A OF A TWO-PART PROGRAM(A & B) THAT * TESTS THE CONCURRENCY OF SQL * * REFERENCES * ANSI SQL-1992 * 4.28 SQL-transactions * ****************************************************************
DISPLAY"*** This program is part A of a two-part" DISPLAY"*** program (A & B)."
DISPLAY" This is Program A which starts first and
- " waits.... "
.
P100. * -----Initialization----- MOVE 0 TO code1 * EXEC SQL DELETE FROM MP8_AA; CALL"SUB2"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then MOVE 1 TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (1,'A'); CALL"SUB3"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then MOVE 1 TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (2,'A'); CALL"SUB4"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then MOVE 1 TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (3,'A'); CALL"SUB5"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then MOVE 1 TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (4,'A'); CALL"SUB6"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then MOVE 1 TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (5,'A'); CALL"SUB7"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then MOVE 1 TO code1 END-IF * EXEC SQL DELETE FROM MP8_NEXTKEY; CALL"SUB8"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then MOVE 1 TO code1 END-IF * EXEC SQL INSERT * INTO MP8_NEXTKEY (KEYNUM,AUTHOR) * VALUES (1,'A'); CALL"SUB9"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0) then MOVE 1 TO code1 END-IF
if (code1 = 1) then DISPLAY"*****Error initializing tables ****" * EXEC SQL ROLLBACK WORK; CALL"SUB10"USING SQLCODE MOVE SQLCODE TO SQL-COD GOTO P100 END-IF
* EXEC SQL COMMIT WORK; CALL"SUB11"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0) then DISPLAY"*********Setup will not commit ********" * EXEC SQL ROLLBACK WORK; CALL"SUB12"USING SQLCODE MOVE SQLCODE TO SQL-COD GOTO P100 END-IF
* -----Synchronization-----
.
P105. DISPLAY" PLEASE start program MPB008!!! " *pause a little *increase value of variable pauze if MPB008 has trouble * getting table MP8_NEXTKEY. MOVE 0 TO i
.
P106. * EXEC SQL UPDATE MP8_NN * SET NUMTEST = 1; CALL"SUB13"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE i = i + 1 if (i < pauze) then GOTO P106 END-IF *end of pause
MOVE 0 TO knum * EXEC SQL SELECT COUNT(*) * INTO :knum * FROM MP8_NEXTKEY WHERE AUTHOR = 'B'; CALL"SUB14"USING SQLCODE knum MOVE SQLCODE TO SQL-COD
DISPLAY"Transaction A Starts!! " *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME DISPLAY" " DISPLAY"IF this test lasts too long, DEADLOCK" DISPLAY"has taken place, STOP this test!" DISPLAY" "
DISPLAY"Brief pause" MOVE 0 TO j
.
P122. * EXEC SQL UPDATE MP8_NN * SET NUMTEST = 1; CALL"SUB16"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE j = j + 1 if (j < pauze4) then GOTO P122 END-IF *end of pause
DISPLAY"SELECT COUNT(*) FROM MP8_AA WHERE ANUM = 3;" * EXEC SQL SELECT COUNT(*) INTO :tmpint * FROM MP8_AA WHERE ANUM = 3; CALL"SUB17"USING SQLCODE tmpint MOVE SQLCODE TO SQL-COD
DISPLAY"COUNT must be 1; its value is ", tmpint
if (tmpint NOT = 1) then MOVE 0 TO flag END-IF
.
P101. DISPLAY"DELETE FROM MP8_AA WHERE ANUM = 3;" * EXEC SQL DELETE FROM MP8_AA * WHERE ANUM = 3; CALL"SUB18"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then GOTO P120 END-IF
DISPLAY"Waste time...." MOVE 0 TO j
.
P102. * EXEC SQL UPDATE MP8_NN * SET NUMTEST = 1; CALL"SUB19"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE j = j + 1 if (j < pauze2) then GOTO P102 END-IF *end of pause
DISPLAY"INSERT INTO MP8_AA VALUES (3,'A');" * EXEC SQL INSERT INTO MP8_AA VALUES (3,'A'); CALL"SUB20"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then GOTO P120 END-IF DISPLAY"COMMIT WORK;" * EXEC SQL COMMIT WORK; CALL"SUB21"USING SQLCODE MOVE SQLCODE TO SQL-COD if (SQLCODE NOT < 0) then GOTO P166 END-IF
.
P120. DISPLAY"!+!+!+!+!+!+!+!+ DEADLOCK? !+!+!+!+!+!+!+!+!+!+!" DISPLAY"Negative SQLCODE (Deadlock?) was returned earlier" DISPLAY"!+!+!+!+!+!+!+!+ DEADLOCK? !+!+!+!+!+!+!+!+!+!+!" *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME DISPLAY"Restarting transaction" * EXEC SQL ROLLBACK WORK; CALL"SUB22"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE flcnt = flcnt + 1 if (flcnt < mxfail) then GOTO P101 END-IF MOVE 0 TO flcnt DISPLAY"Wasting some time to try to end repeated
- " restarts..." MOVE 0 TO j
.
P136. * EXEC SQL UPDATE MP8_NN * SET NUMTEST = 1; CALL"SUB23"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE j = j + 1 if (j < pauze2) then GOTO P136 END-IF *end of pause GOTO P101
.
P166. *Waste time DISPLAY"MPA008 transaction completed--wasting time...." *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME MOVE 0 TO cnt
.
P115. * EXEC SQL UPDATE MP8_NEXTKEY * SET KEYNUM = KEYNUM +1; CALL"SUB24"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE cnt = cnt + 1 if (cnt < pauze3) then GOTO P115 END-IF * EXEC SQL COMMIT WORK; CALL"SUB25"USING SQLCODE MOVE SQLCODE TO SQL-COD
.
P168. *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME *Finish up DISPLAY"SELECT COUNT(*) FROM MP8_AA WHERE ANUM = 3;" * EXEC SQL SELECT COUNT(*) INTO :tmpint * FROM MP8_AA WHERE ANUM = 3; CALL"SUB26"USING SQLCODE tmpint MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0 ) then DISPLAY"Restarting final evaluation due to negative
- " SQLCODE." * EXEC SQL COMMIT WORK; CALL"SUB27"USING SQLCODE MOVE SQLCODE TO SQL-COD GOTO P168 END-IF
DISPLAY"COUNT must be 1; its value is ", tmpint if (tmpint NOT = 1) then MOVE 0 TO flag END-IF
DISPLAY"SELECT COUNT(*) FROM MP8_AA WHERE AUTHOR = 'B';" * EXEC SQL SELECT COUNT(*) INTO :tmpint * FROM MP8_AA WHERE AUTHOR = 'B'; CALL"SUB28"USING SQLCODE tmpint MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0 ) then DISPLAY"Restarting final evaluation due to negative
- " SQLCODE." * EXEC SQL COMMIT WORK; CALL"SUB29"USING SQLCODE MOVE SQLCODE TO SQL-COD GOTO P168 END-IF
DISPLAY"COUNT must be 0; its value is ", tmpint if (tmpint NOT = 0) then MOVE 0 TO flag END-IF
if ( flag = 1 ) then DISPLAY" *** pass *** " * EXEC SQL INSERT INTO HU.TESTREPORT * VALUES('0517','pass','MCO'); CALL"SUB30"USING SQLCODE MOVE SQLCODE TO SQL-COD else DISPLAY" mpa008.sco *** fail *** " * EXEC SQL INSERT INTO HU.TESTREPORT * VALUES('0517','fail','MCO'); CALL"SUB31"USING SQLCODE MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF * EXEC SQL COMMIT WORK; CALL"SUB32"USING SQLCODE MOVE SQLCODE TO SQL-COD
******************** END TEST0517 *******************
*Empty table to prevent program MPB from jumping gun on rerun. * EXEC SQL DELETE FROM MP8_NEXTKEY; CALL"SUB33"USING SQLCODE MOVE SQLCODE TO SQL-COD * EXEC SQL COMMIT WORK; CALL"SUB34"USING SQLCODE MOVE SQLCODE TO SQL-COD
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
¤ 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.