* 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----- MOVE0TO code1 * EXEC SQL DELETE FROM MP8_AA; CALL"SUB2"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then MOVE1TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (1,'A'); CALL"SUB3"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then MOVE1TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (2,'A'); CALL"SUB4"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then MOVE1TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (3,'A'); CALL"SUB5"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then MOVE1TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (4,'A'); CALL"SUB6"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then MOVE1TO code1 END-IF * EXEC SQL INSERT INTO MP8_AA VALUES (5,'A'); CALL"SUB7"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then MOVE1TO code1 END-IF * EXEC SQL DELETE FROM MP8_NEXTKEY; CALL"SUB8"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then MOVE1TO code1 END-IF * EXEC SQL INSERT * INTO MP8_NEXTKEY (KEYNUM,AUTHOR) * VALUES (1,'A'); CALL"SUB9"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then MOVE1TO code1 END-IF
if (code1 = 1) then DISPLAY"*****Error initializing tables ****" * EXEC SQL ROLLBACK WORK; CALL"SUB10"USINGSQLCODE MOVESQLCODETO SQL-COD GOTO P100 END-IF
* EXEC SQL COMMIT WORK; CALL"SUB11"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODENOT = 0) then DISPLAY"*********Setup will not commit ********" * EXEC SQL ROLLBACK WORK; CALL"SUB12"USINGSQLCODE MOVESQLCODETO 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. MOVE0TO i
.
P106. * EXEC SQL UPDATE MP8_NN * SET NUMTEST = 1; CALL"SUB13"USINGSQLCODE MOVESQLCODETO SQL-COD COMPUTE i = i + 1 if (i < pauze) then GOTO P106 END-IF *end of pause
MOVE0TO knum * EXEC SQL SELECT COUNT(*) * INTO :knum * FROM MP8_NEXTKEY WHERE AUTHOR = 'B'; CALL"SUB14"USINGSQLCODE knum MOVESQLCODETO 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" MOVE0TO j
.
P122. * EXEC SQL UPDATE MP8_NN * SET NUMTEST = 1; CALL"SUB16"USINGSQLCODE MOVESQLCODETO 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"USINGSQLCODE tmpint MOVESQLCODETO SQL-COD
DISPLAY"COUNT must be 1; its value is ", tmpint
if (tmpint NOT = 1) then MOVE0TO flag END-IF
.
P101. DISPLAY"DELETE FROM MP8_AA WHERE ANUM = 3;" * EXEC SQL DELETE FROM MP8_AA * WHERE ANUM = 3; CALL"SUB18"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then GOTO P120 END-IF
DISPLAY"Waste time...." MOVE0TO j
.
P102. * EXEC SQL UPDATE MP8_NN * SET NUMTEST = 1; CALL"SUB19"USINGSQLCODE MOVESQLCODETO 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"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODE < 0) then GOTO P120 END-IF DISPLAY"COMMIT WORK;" * EXEC SQL COMMIT WORK; CALL"SUB21"USINGSQLCODE MOVESQLCODETO SQL-COD if (SQLCODENOT < 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"USINGSQLCODE MOVESQLCODETO SQL-COD COMPUTE flcnt = flcnt + 1 if (flcnt < mxfail) then GOTO P101 END-IF MOVE0TO flcnt DISPLAY"Wasting some time to try to end repeated
- " restarts..." MOVE0TO j
.
P136. * EXEC SQL UPDATE MP8_NN * SET NUMTEST = 1; CALL"SUB23"USINGSQLCODE MOVESQLCODETO SQL-COD COMPUTE j = j + 1 if (j < pauze2) then GOTO P136 END-IF *end of pause GOTO P101
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.