* Standard COBOL (file "DML082.SCO") calling SQL * procedures in file "DML082.MCO". * STANDARD COBOL (file "DML082.SCO")
**************************************************************** * * COMMENT SECTION * * DATE 1992/07/07 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. * * DML082.SCO * WRITTEN BY: DAVID W. FLATER * * THIS ROUTINE TESTS THE SQLSTATE STATUS CODE. * * REFERENCES * ANSI SQL-1992 * 22.1 SQLSTATE * ****************************************************************
MOVE"SCHANZLE"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 SQLSTATE uidx MOVE SQLCODE TO SQL-COD if (uid NOT = uidx) then DISPLAY"ERROR: User ", uid " expected. User ", uidx "
- " connected" STOPRUN END-IF MOVE 0 TO errcnt
DISPLAY "SQL Test Suite, V6.0, Standard COBOL, dml082.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 TEST0491 ******************* MOVE 0 TO flag
*This test is assumed passed if the database cannot create *a CHAR column of size 33000 for table FLATER.TINY. It is *also passed by the program logic if the type of the *indicator variable gets changed to long int.
*42000, the SQLSTATE for syntax error or access rule *violation, reflects the fact that a nonexistent table *has been queried. If the test will not compile because *TINY does not exist, save the error message and use TEd *to delete this test case: it is a pass.
MOVE 33000 TO i33000 COMPUTE indic1 = -44 MOVE 0 TO tmpcnt MOVE"z"TO huge
* EXEC SQL DELETE FROM FLATER.TINY; CALL"SUB2"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD * EXEC SQL INSERT INTO FLATER.TINY VALUES * ('Too long for its own good!'); CALL"SUB3"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"SELECT COUNT(*) INTO :tmpcnt FROM FLATER.TINY;" DISPLAY"(SQLCD1=SQLCODE, SQLST1=SQLSTATE for this SELECT
- " COUNT(*))" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt FROM FLATER.TINY * ; CALL"SUB4"USING SQLCODE SQLSTATE tmpcnt MOVE SQLCODE TO SQL-COD MOVE SQLCODE TO SQLCD1 MOVE SQLSTATE TO SQLST1 PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS MOVE NR-TAB TO testst
MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY"SELECT C1 INTO :huge:indic1 FROM FLATER.TINY;" * EXEC SQL SELECT C1 INTO :huge:indic1 FROM FLATER.TINY * ; CALL"SUB5"USING SQLCODE SQLSTATE huge indic1 MOVE SQLCODE TO SQL-COD PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
DISPLAY" " DISPLAY"To pass, you need EITHER:" DISPLAY"No such table!" DISPLAY" SQLCD1 < 0, SQLST1 = '42000'," DISPLAY" SQLCODE < 0, and SQLSTATE = '42000'" DISPLAY" " DISPLAY"OR:" DISPLAY"Indicator overflow!" DISPLAY" SQLCD1 = 0, SQLST1 = '00000', tmpcnt =
- " 1" DISPLAY" SQLCODE < 0, and SQLSTATE = '22022'" DISPLAY" " DISPLAY"OR:" DISPLAY"Successful completion!" DISPLAY" SQLCD1 = 0, SQLST1 = '00000', tmpcnt =
- " 1" DISPLAY" SQLCODE >= 0, SQLSTATE = '01004'" DISPLAY" indic1 = 33000, and huge = 'T'" DISPLAY" " DISPLAY"SQLCD1 is ", SQLCD1 "; SQLST1 is ", SQLST1 DISPLAY"tmpcnt is ", tmpcnt DISPLAY"SQLCODE is ", SQL-COD "; SQLSTATE is ", SQLSTATE if (SQLCODE = 0) then DISPLAY"indic1 is ", indic1 "; huge is ", huge " " END-IF
*test for no such table MOVE 0 TO flag2 if (SQLCD1 < 0 AND testst = "42000") then MOVE 1 TO flag2 END-IF if (flag2 = 1 AND SQLCODE < 0 AND NR-TAB = "42000") then MOVE 1 TO flag END-IF
*test for indicator overflow MOVE 0 TO flag2 if (SQLCD1 = 0 AND testst = "00000"AND tmpcnt =
1) then MOVE 1 TO flag2 END-IF if (flag2 = 1 AND SQLCODE < 0 AND SQLSTATE = "22022") then MOVE 1 TO flag END-IF
*test for successful completion MOVE 0 TO flag2 MOVE 0 TO flag3 if (SQLCD1 = 0 AND testst = "00000"AND tmpcnt =
1) then MOVE 1 TO flag2 END-IF if (flag2 = 1 AND SQLCODE NOT < 0 AND NR-TAB = "01004") then MOVE 1 TO flag3 END-IF if (flag3 = 1 AND indic1 = i33000 AND huge = "T") then MOVE 1 TO flag END-IF
MOVE"Percent%Xunder_"TO colval DISPLAY"UPDATE HU.STAFF SET CITY = ", colval DISPLAY" WHERE EMPNUM = 'E1';" * EXEC SQL UPDATE HU.STAFF SET CITY = :colval * WHERE EMPNUM = 'E1'; CALL"SUB10"USING SQLCODE SQLSTATE colval MOVE SQLCODE TO SQL-COD DISPLAY" "
*Subtest 0492a begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*literal escape character - 2-byte escape char MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE MOVE"%XX%X_%"TO patrn7 DISPLAY"SELECT COUNT(*) FROM HU.STAFF WHERE" DISPLAY"CITY LIKE ", patrn7 " ESCAPE 'XX';" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt * FROM HU.STAFF WHERE CITY * LIKE '%XX%X_%' ESCAPE 'XX'; CALL"SUB11"USING SQLCODE SQLSTATE tmpcnt MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '22019'; its value is ",
SQLSTATE if (SQLCODE NOT < 0 OR SQLSTATE NOT = "22019") then MOVE 0 TO flag END-IF *Subtest 0492a ends
*literal escape character - 1-byte escape char MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE COMPUTE tmpcnt = -1 DISPLAY" " MOVE"%XX%X_%"TO patrn7 DISPLAY"SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF WHERE" DISPLAY"CITY LIKE ", patrn7 " ESCAPE 'X';" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt * FROM HU.STAFF WHERE CITY LIKE '%XX%X_%' ESCAPE 'X' * ; CALL"SUB12"USING SQLCODE SQLSTATE tmpcnt MOVE SQLCODE TO SQL-COD DISPLAY"tmpcnt should be 1; its value is ", tmpcnt DISPLAY"SQLCODE should be 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '00000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (tmpcnt NOT = 1 OR SQLCODE NOT = 0 OR NR-TAB NOT = "00000") then MOVE 0 TO flag END-IF
*Subtest 0492c begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*parameter escape character - 2-byte escape char MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE MOVE"XX"TO esch2 DISPLAY" " MOVE"%XX_%"TO patrn7 DISPLAY"SELECT COUNT(*) INTO :tmpcnt FROM HU.STAFF WHERE" DISPLAY"CITY LIKE ", patrn7 " ESCAPE :esch2;" DISPLAY"Note that esch2 = 'XX'" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt * FROM HU.STAFF WHERE CITY * LIKE '%XX_%' ESCAPE :esch2; CALL"SUB13"USING SQLCODE SQLSTATE tmpcnt esch2 MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '22019'; its value is ",
SQLSTATE if (SQLCODE NOT < 0 OR SQLSTATE NOT = "22019") then MOVE 0 TO flag END-IF *Subtest 0492c ends
*parameter escape character - 1-byte escape char MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE MOVE"X"TO esch1 COMPUTE tmpcnt = -1 DISPLAY" " MOVE"%XX_%"TO patrn7 DISPLAY"SELECT COUNT(*) FROM HU.STAFF WHERE" DISPLAY"CITY LIKE ", patrn7 " ESCAPE :esch1;" DISPLAY"Note that esch1 = 'X'" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt * FROM HU.STAFF WHERE CITY * LIKE '%XX_%' ESCAPE :esch1; CALL"SUB14"USING SQLCODE SQLSTATE tmpcnt esch1 MOVE SQLCODE TO SQL-COD DISPLAY"tmpcnt should be 1; its value is ", tmpcnt DISPLAY"SQLCODE should be 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '00000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (tmpcnt NOT = 1 OR SQLCODE NOT = 0 OR NR-TAB NOT = "00000") then MOVE 0 TO flag END-IF
MOVE"Per%X&und_"TO colval * EXEC SQL DELETE FROM CPBASE; CALL"SUB19"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"INSERT INTO CPBASE VALUES (82,'Per%X&und_')" * EXEC SQL INSERT INTO CPBASE VALUES (82,'Per%X&und_') * ; CALL"SUB20"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD
*Subtest 0493a begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*SELECT...LIKE, literal escape char, literal pattern - *pattern ends with escape char MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY" " MOVE"P%X%%X"TO patrn7 DISPLAY"SELECT COUNT(*) FROM CPBASE WHERE" DISPLAY"JUNK1 LIKE ", patrn7 " ESCAPE 'X';" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt * FROM CPBASE WHERE JUNK1 * LIKE 'P%X%%X' ESCAPE 'X'; CALL"SUB21"USING SQLCODE SQLSTATE tmpcnt MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '22025'; its value is ",
SQLSTATE if (SQLCODE NOT < 0 OR SQLSTATE NOT = "22025") then MOVE 0 TO flag END-IF *Subtest 0493a ends
*variation that should work - remove last X in pattern COMPUTE tmpcnt = -1 MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE MOVE"P%X%%"TO patrn7 DISPLAY" " DISPLAY"SELECT COUNT(*) INTO :tmpcnt FROM CPBASE" DISPLAY" WHERE JUNK1 LIKE ", patrn7 " ESCAPE 'X';" * EXEC SQL SELECT COUNT(*) INTO :tmpcnt * FROM CPBASE WHERE JUNK1 * LIKE 'P%X%%' ESCAPE 'X'; CALL"SUB22"USING SQLCODE SQLSTATE tmpcnt MOVE SQLCODE TO SQL-COD DISPLAY"After removing the last X in the pattern:" DISPLAY"tmpcnt should be 1; its value is ", tmpcnt DISPLAY"SQLCODE should be 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '00000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (tmpcnt NOT = 1 OR SQLCODE NOT = 0 OR NR-TAB NOT = "00000") then MOVE 0 TO flag END-IF
*Subtest 0493c begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*INSERT...LIKE, literal escape char, parameter pattern - *escape char in pattern not followed by *percent, underscore, escape char MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY" " MOVE"%X%%Xd_"TO patrn7 DISPLAY"INSERT INTO HU.STAFF" DISPLAY"SELECT 'E12','ff',KC,'gg' FROM CPBASE" DISPLAY"WHERE JUNK1 LIKE :patrn7 ESCAPE 'X';" * EXEC SQL INSERT INTO HU.STAFF * SELECT 'E12','ff',KC,'gg' FROM CPBASE * WHERE JUNK1 LIKE :patrn7 ESCAPE 'X'; CALL"SUB23"USING SQLCODE SQLSTATE patrn7 MOVE SQLCODE TO SQL-COD DISPLAY"Note that patrn7 = ", patrn7 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '22025'; its value is ",
SQLSTATE if (SQLCODE NOT < 0 OR SQLSTATE NOT = "22025") then MOVE 0 TO flag END-IF *Subtest 0493c ends
*variation that should work - remove the "d" in pattern MOVE"%X%%X_"TO patrn6 MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY" " DISPLAY"INSERT INTO HU.STAFF SELECT 'E13','ff',KC,'gg'" DISPLAY"FROM CPBASE WHERE JUNK1 LIKE :patrn6 ESCAPE 'X';" * EXEC SQL INSERT INTO HU.STAFF * SELECT 'E13','ff',KC,'gg' FROM CPBASE * WHERE JUNK1 LIKE :patrn6 ESCAPE 'X'; CALL"SUB24"USING SQLCODE SQLSTATE patrn6 MOVE SQLCODE TO SQL-COD DISPLAY"After removing the 'd' in the pattern:" DISPLAY"Note that patrn6 = ", patrn6 DISPLAY"SQLCODE should be 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '00000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT = 0 OR NR-TAB NOT = "00000") then MOVE 0 TO flag END-IF
*Subtest 0493e begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*UPDATE...LIKE, parameter escape char, literal pattern - *escape char in pattern not followed by *percent, underscore, escape char MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY" " MOVE"?"TO esch1 MOVE"%?X%"TO patrn7 DISPLAY"UPDATE CPBASE SET KC = -1 " DISPLAY"WHERE JUNK1 LIKE ", patrn7 " ESCAPE :esch1;" * EXEC SQL UPDATE CPBASE SET KC = -1 * WHERE JUNK1 LIKE '%?X%' ESCAPE :esch1; CALL"SUB25"USING SQLCODE SQLSTATE esch1 MOVE SQLCODE TO SQL-COD DISPLAY"Note that esch1 = ", esch1 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '22025'; its value is ",
SQLSTATE if (SQLCODE NOT < 0 OR SQLSTATE NOT = "22025") then MOVE 0 TO flag END-IF *Subtest 0493e ends
*variation that should work - add a % after escape char in patte MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE MOVE"?"TO esch1 MOVE"%?%X%"TO patrn7 DISPLAY" " DISPLAY"UPDATE CPBASE SET KC = -1" DISPLAY"WHERE JUNK1 LIKE ", patrn7 " ESCAPE :esch1;" * EXEC SQL UPDATE CPBASE SET KC = -1 * WHERE JUNK1 LIKE '%?%X%' ESCAPE :esch1; CALL"SUB26"USING SQLCODE SQLSTATE esch1 MOVE SQLCODE TO SQL-COD DISPLAY"After adding a percent in the middle of the
- " pattern:" DISPLAY"Note that esch1 = ", esch1 DISPLAY"SQLCODE should be 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '00000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT = 0 OR NR-TAB NOT = "00000") then MOVE 0 TO flag END-IF
*Subtest 0493g begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*DELETE... LIKE, parameter escape char, parameter pattern - *escape char in pattern not followed by *percent, underscore, escape char MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE DISPLAY" " MOVE"&"TO esch1 MOVE"_e%&u%"TO patrn6 DISPLAY"DELETE FROM CPBASE" DISPLAY"WHERE JUNK1 LIKE :patrn6 ESCAPE :esch1;" * EXEC SQL DELETE FROM CPBASE * WHERE JUNK1 LIKE :patrn6 ESCAPE :esch1; CALL"SUB27"USING SQLCODE SQLSTATE patrn6 esch1 MOVE SQLCODE TO SQL-COD DISPLAY"Note that patrn6 = ", patrn6 " and escape char =",
esch1 DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '22025'; its value is ",
SQLSTATE if (SQLCODE NOT < 0 OR SQLSTATE NOT = "22025") then MOVE 0 TO flag END-IF *Subtest 0493g ends
*variation that should work - add an & in pattern MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE MOVE"&"TO esch1 MOVE"_e%&&u%"TO patrn7 DISPLAY" " DISPLAY"DELETE FROM CPBASE" DISPLAY"WHERE JUNK1 LIKE :patrn7 ESCAPE :esch1;" * EXEC SQL DELETE FROM CPBASE * WHERE JUNK1 LIKE :patrn7 ESCAPE :esch1; CALL"SUB28"USING SQLCODE SQLSTATE patrn7 esch1 MOVE SQLCODE TO SQL-COD DISPLAY"After adding an ampersand in the middle of the
- " pattern:" DISPLAY"Note that patrn7 = ", patrn7 " and escape char =",
esch1 DISPLAY"SQLCODE should be 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '00000'; its value is ",
SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT = 0 OR NR-TAB NOT = "00000") then MOVE 0 TO flag END-IF
* EXEC SQL COMMIT WORK; CALL"SUB32"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD ******************** END TEST0493 ********************
******************** BEGIN TEST0494 ******************* MOVE 1 TO flag
DISPLAY" TEST0494 " DISPLAY"SQLSTATE = 22003: data exception " DISPLAY"(numeric value out of range)" DISPLAY"Reference ANSI SQL-1992 section 9.1 GR 3k " DISPLAY" and section 9.2 GR 3k" DISPLAY" - - - - - - - - - - - - - - - - - - -"
*Subtest 0494a begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*insert larger and larger long parameter DISPLAY" " * EXEC SQL DELETE FROM HU.HH; CALL"SUB33"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE MOVE 0 TO maxlon MOVE 10 TO LONG1 MOVE 1 TO ii PERFORM P50 UNTIL ii > 50
.
P173. DISPLAY"INSERT INTO HU.HH VALUES (:LONG1) done ", loopct "
- " times" DISPLAY"For values 10, 100, 1000, 10000, etc." DISPLAY"The maximum value inserted was ", maxlon if (SQLCODE NOT < 0) then GOTO P174 END-IF DISPLAY" before a negative SQLCODE was returned" DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '22003'; its value is ",
SQLSTATE if (SQLSTATE NOT = "22003") then MOVE 0 TO flag END-IF
.
P174. if (SQLCODE NOT < 0) then DISPLAY"Exception not encountered. Pass by default." END-IF * EXEC SQL ROLLBACK WORK; CALL"SUB34"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD *Subtest 0494a ends
*Subtest 0494b begins. *If it will not compile, save error message *and then delete the subtest with TEd "hooks".
*enlarge value in table FF to the max DISPLAY" " * EXEC SQL DELETE FROM HU.FF; CALL"SUB35"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD * EXEC SQL INSERT INTO HU.FF VALUES (99999); CALL"SUB36"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD DISPLAY"Starting at value 99999, UPDATE to multiply by 10" MOVE 1 TO ii PERFORM P49 UNTIL ii > 50
.
P175. DISPLAY"Column INTTEST was multiplied by 10 ", loopct "
- " times" *We are now ready to select it back.
*select back that large value into a short DISPLAY" " MOVE 44 TO SQLCODE MOVE"x"TO SQLSTATE COMPUTE SMALL1 = -1 DISPLAY"SELECT INTTEST INTO :SMALL1 FROM HU.FF;" * EXEC SQL SELECT INTTEST INTO :SMALL1 FROM HU.FF; CALL"SUB37"USING SQLCODE SQLSTATE SMALL1 MOVE SQLCODE TO SQL-COD if (SQLCODE = 0) then DISPLAY "The large value from HU.FF was selected as SMALLINT." END-IF DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be '22003'; its value is ",
SQLSTATE if (SQLCODE NOT < 0 OR SQLSTATE NOT = "22003") then MOVE 0 TO flag END-IF * EXEC SQL ROLLBACK WORK; CALL"SUB38"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD *Subtest 0494b ends
* EXEC SQL COMMIT WORK; CALL"SUB49"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD ******************** END TEST0505 ********************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
NOSUBCLASS.
*This routine replaces valid implementation-defined *subclasses with 000. This replacement equates valid *implementation-defined subclasses with the 000 value *expected by the test case; otherwise the test will fail. *After calling NOSUBCLASS, NORMSQ will be tested * SQLSTATE will be printed.
MOVE SQLSTATE TO NR-TAB
MOVE 3 TO norm1 *subclass begins in position 3 of char array NORMSQ MOVE 14 TO norm2 PERFORM P90 UNTIL norm2 > 36
if (NR-TAB = SQLSTATE) then GOTO EXIT-NOSUBCLASS END-IF *Quit if NORMSQ is unchanged. Subclass is not impl.-def. *Changed NORMSQ means implementation-defined subclass, *so proceed to zero it out, if valid (0-9,A-Z)
MOVE 4 TO norm1 *examining position 4 of char array NORMSQ MOVE 1 TO norm2 PERFORM P89 UNTIL norm2 > 36
MOVE 5 TO norm1 *examining position 5 of char array NORMSQ MOVE 1 TO norm2 PERFORM P88 UNTIL norm2 > 36
*implementation-defined subclasses are allowed for warnings *(class = 01). These equate to successful completion *SQLSTATE values of 00000. *Reference SQL-92 4.28 SQL-transactions, paragraph 2
if (NORMSQ(1) = "0"AND NORMSQ(2) = "1") then MOVE"0"TO NORMSQ(2) END-IF GOTO EXIT-NOSUBCLASS
.
P90. *valid subclass begins with 5-9, I-Z, end of ALPNUM table if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
P89. *valid characters are 0-9, A-Z if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
P88. *valid characters are 0-9, A-Z if (NORMSQ(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2
.
EXIT-NOSUBCLASS. EXIT.
P50. * EXEC SQL INSERT INTO HU.HH VALUES (:LONG1); CALL"SUB50"USING SQLCODE SQLSTATE LONG1 MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then GOTO P173 END-IF MOVE ii TO loopct if (LONG1 > maxlon) then MOVE LONG1 TO maxlon END-IF COMPUTE LONG1 = LONG1 * 10 ADD 1 TO ii
.
P49. * EXEC SQL UPDATE HU.FF SET INTTEST = 10 * INTTEST; CALL"SUB51"USING SQLCODE SQLSTATE MOVE SQLCODE TO SQL-COD if (SQLCODE < 0) then GOTO P175 END-IF MOVE ii TO loopct ADD 1 TO ii
.
¤ Dauer der Verarbeitung: 0.23 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.