**************************************************************** * * COMMENT SECTION * * DATE 1992/07/31 EMBEDDED 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. * * MPB008.PCO * WRITTEN BY: David W. Flater * * THIS PROGRAM IS PART B 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 B of a two-part" DISPLAY"*** program (A & B)."
DISPLAY" This is Program B which starts after Program A...
- " "
* -----Synchronization-----
.
P105. MOVE 0 TO knum EXECSQLSELECTCOUNT(*) INTO :knum FROM MP8_NEXTKEY WHERE AUTHOR = 'A'END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
*are we in sync?
if (knum = 0) then DISPLAY" PLEASE start program MPA008!!! " GOTO P105 END-IF
.
P106. MOVE 0 TO code1 EXECSQLINSERTINTO MP8_NEXTKEY (KEYNUM,AUTHOR)
VALUES(2, 'B') END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0) then MOVE 1 TO code1 END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE NOT = 0) then MOVE 1 TO code1 END-IF if (code1 NOT = 0) then EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"Retrying synchronization logic." GOTO P106 END-IF
*YES, we are in sync!
DISPLAY"Transaction B 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"This part of the test loops continuously trying
- " to" DISPLAY"insert a duplicate row into MP8_AA. If it
- " succeeds," DISPLAY"there has been a serializability or unique
- " constraint" DISPLAY"failure." DISPLAY" "
.
P101. DISPLAY"INSERT INTO MP8_AA VALUES (3,'B');" EXECSQLINSERTINTO MP8_AA VALUES (3,'B') END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then GOTO P120 END-IF
DISPLAY"COMMIT WORK;" EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD if (SQLCODE NOT < 0) then GOTO P166 END-IF
.
P120. COMPUTE flcnt = flcnt + 1 if (flcnt > mxfail) then GOTO P180 END-IF DISPLAY"*** Negative SQLCODE (Deadlock or UNIQUE
- " violation?) ***" *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME DISPLAY"Restarting transaction" EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD GOTO P101
.
P180. DISPLAY" " DISPLAY"Maximum number of negative SQLCODEs exceeded" *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME DISPLAY"THIS IS CORRECT BEHAVIOR FOR THIS TEST." EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD GOTO P198
.
P166. DISPLAY" " *date_time print ACCEPT TO-DAY FROMDATE ACCEPT THE-TIME FROMTIME DISPLAY"Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME DISPLAY"TRANSACTION COMPLETED--THIS SHOULD NOT HAVE
- " HAPPENED!!" DISPLAY" mpb008.pco *** fail *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0517','fail','PCO') END-EXEC MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO 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 ist noch experimentell.