**************************************************************** * * COMMENT SECTION * * DATE 1995/02/13 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. * * DML149.PCO * WRITTEN BY: David W. Flater and Joan Sullivan * TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE * * This routine tests SET TRANSACTION and CAST. * * REFERENCES * F# 11 -- Transaction isolation * 14.1 -- <set transaction statement> * 6.10 -- <cast specification> * ****************************************************************
MOVE"FLATER "TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx EXECSQLSELECT USER INTO :uidx FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL ROLLBACK WORK END-EXEC 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, Embedded COBOL, dml149.pco" 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 TEST0561 ******************* MOVE 1 TO flag
DISPLAY"SET TRANSACTION READ ONLY;" EXECSQLSET TRANSACTION READ ONLY END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"INSERT INTO USIG VALUES (10, 20);" EXECSQLINSERTINTO USIG VALUES (10, 20) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD DISPLAY"SQLSTATE should be 25000; its value is ", SQLSTATE PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS if (SQLCODE NOT < 0 OR NORMSQ NOT = "25000") then MOVE 0 TO flag END-IF if (NORMSQ = "25000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF DISPLAY" "
DISPLAY"ROLLBACK WORK;" EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
if ( flag = 1 ) then DISPLAY" *** pass *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0561','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml149.pco *** fail *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0561','fail','PCO') END-EXEC MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD ******************** END TEST0561 ******************** ******************** BEGIN TEST0846 ******************* MOVE 1 TO flag
DISPLAY"COMMIT WORK;" EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
* 1. In numeric-to-numeric cast, loss of leading significant * digits raises SQLSTATE 22003. GR.3.a.ii GR.4.a.ii
*6.10 GR.3.a.ii any numeric to exact numeric losing leading sig DISPLAY"CAST (100 AS NUMERIC (2)) loses the leading
- " significant digit" DISPLAY"SELECT CAST (100 AS NUMERIC (2))" DISPLAY" INTO :flt1 FROM HU.ECCO;" EXECSQLSELECT CAST (100 AS NUMERIC (2)) INTO :flt1 FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then MOVE flt1 TO FLT-1 DISPLAY"flt1 should not be returned; its value is ",
FLT-1 END-IF DISPLAY"SQLSTATE should be 22003; its value is ", SQLSTATE if (SQLSTATE NOT = "22003") then MOVE 0 TO flag END-IF
*6.10 GR.4.a.ii any numeric to approx numeric losing leading sig *Not testable.
* 2. In numeric-to-numeric cast, rounding or truncation is OK * (supported without exception). GR.3.a.i GR.4.a.i
*6.10 GR.3.a.i any numeric to exact numeric losing low order dig MOVE 0 TO int1 DISPLAY"SELECT CAST (100.5 AS DECIMAL (3))" DISPLAY" INTO :int1 FROM HU.ECCO;" EXECSQLSELECT CAST (100.5 AS DECIMAL (3)) INTO :int1 FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 100 or 101; its value is ", int1 if (int1 NOT = 100 AND int1 NOT = 101) then MOVE 0 TO flag END-IF
* 3. Leading or trailing blanks are removed from a character * string before cast to numeric. GR.3.b GR.4.b
MOVE 0 TO int1 DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM NO_DUCK WHERE GOOSE = 23.23;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM NO_DUCK WHERE GOOSE = 23.23 END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 1; its value is ", int1 if (int1 NOT = 1) then MOVE 0 TO flag END-IF
*to approximate numeric
DISPLAY"DELETE FROM NO_DUCK" DISPLAY" WHERE ALBATROSS - CAST (' 15.5E0 ' AS
- " FLOAT) < 3E-1;" EXECSQLDELETEFROM NO_DUCK
WHERE ALBATROSS - CAST (' 15.5E0 ' AS FLOAT) < 3E-1 END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
MOVE 10 TO int1 DISPLAY"SELECT COUNT(*) INTO :int1 FROM NO_DUCK;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 0; its value is ", int1 if (int1 NOT = 0) then MOVE 0 TO flag END-IF
DISPLAY"INSERT INTO NO_DUCK" DISPLAY" SELECT 22.22, CAST (C1 AS FLOAT), 0, C1 FROM
- " HU.ECCO;" EXECSQLINSERTINTO NO_DUCK SELECT 22.22, CAST (C1 AS FLOAT), 0, C1 FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE should be 22018; its value is ", SQLSTATE if (SQLSTATE NOT = "22018") then MOVE 0 TO flag END-IF
DISPLAY"INSERT INTO NO_DUCK" DISPLAY" SELECT 22.22, 2.222E1, CAST (C1 AS INT),
- " 'QUACK!' FROM HU.ECCO;" EXECSQLINSERTINTO NO_DUCK SELECT 22.22, 2.222E1, CAST (C1 AS INT), 'QUACK!'FROM
HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF DISPLAY"SQLSTATE should be 22018; its value is ", SQLSTATE if (SQLSTATE NOT = "22018") then MOVE 0 TO flag END-IF
* 5. An exact numeric cast to string gives the shortest literal * with correct scale (including trailing zeroes). GR.5.a
MOVE 3 TO int1 MOVE"zxyxu"TO ch5 DISPLAY"SELECT CAST (CAST (:int1 AS DEC (5, 3)) AS CHAR
- " (5))" DISPLAY" INTO :ch5 FROM HU.ECCO;" EXECSQLSELECT CAST (CAST (:int1 AS DEC (5, 3)) AS CHAR
(5)) INTO :ch5 FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch5 should be '3.000'; its value is '" ch5 "'" if (ch5 NOT = "3.000") then MOVE 0 TO flag END-IF
* 6. Exact numeric to string cast gives leading hypen for negat * numbers, no blanks or plus sign for non-negative numbers. * GR.5.a
DISPLAY"UPDATE NO_DUCK" DISPLAY" SET OSPREY = CAST (GOOSE AS CHAR (10))" DISPLAY" WHERE SEAGULL = CAST (GOOSE AS DEC);" EXECSQL UPDATE NO_DUCK SET OSPREY = CAST (GOOSE AS CHAR (10))
WHERE SEAGULL = CAST (GOOSE AS DEC) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
MOVE"axbxcxdxex"TO ch10 DISPLAY"SELECT OSPREY INTO :ch10" DISPLAY" FROM NO_DUCK;" EXECSQLSELECT OSPREY INTO :ch10 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be '12.00 '; its value is '",
ch10 "'" if (ch10 NOT = "12.00 ") then MOVE 0 TO flag END-IF
MOVE 1 TO int1 DISPLAY"int1 = 1" MOVE"arrrrrrrgh"TO ch10 DISPLAY"SELECT OSPREY INTO :ch10" DISPLAY" FROM NO_DUCK" DISPLAY" WHERE OSPREY < CAST (SEAGULL + :int1 AS CHAR
- " (10))" DISPLAY" AND OSPREY = CAST (GOOSE * :int1 AS CHAR (10));" EXECSQLSELECT OSPREY INTO :ch10 FROM NO_DUCK
WHERE OSPREY < CAST (SEAGULL + :int1 AS CHAR (10)) AND OSPREY = CAST (GOOSE * :int1 AS CHAR (10)) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be '12.00 '; its value is '",
ch10 "'" if (ch10 NOT = "12.00 ") then MOVE 0 TO flag END-IF
DISPLAY"UPDATE NO_DUCK" DISPLAY" SET OSPREY = CAST (-SEAGULL AS CHAR (10));" EXECSQL UPDATE NO_DUCK SET OSPREY = CAST (-SEAGULL AS CHAR (10)) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
MOVE"axbxcxdxex"TO ch10 DISPLAY"SELECT OSPREY INTO :ch10" DISPLAY" FROM NO_DUCK;" EXECSQLSELECT OSPREY INTO :ch10 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be '-12 '; its value is '",
ch10 "'" if (ch10 NOT = "-12 ") then MOVE 0 TO flag END-IF
* 7. Exact numeric to string cast raises SQLSTATE 22001 on * right truncation. GR.5.a.iv
DISPLAY"Expected value -12.00 is too long for CHAR (5)
- " cast" DISPLAY"SELECT CAST (-GOOSE AS CHAR (5)) INTO :ch10" DISPLAY" FROM NO_DUCK;" EXECSQLSELECT CAST (-GOOSE AS CHAR (5)) INTO :ch10 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then DISPLAY"ch10 should not be returned; its value is ",
ch10 END-IF DISPLAY"SQLSTATE should be 22001; its value is ", SQLSTATE if (SQLSTATE NOT = "22001") then MOVE 0 TO flag END-IF
* 8. Approximate numeric value zero cast to string is 0E0. * GR.5.b.i.1
MOVE 0.0 TO flt1 DISPLAY"flt1 = 0.0" DISPLAY"UPDATE NO_DUCK" DISPLAY" SET ALBATROSS = :flt1;" EXECSQL UPDATE NO_DUCK SET ALBATROSS = :flt1 END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
*-0E0 should never happen
MOVE"zxyxu"TO ch5 DISPLAY"SELECT CAST (-ALBATROSS AS CHAR (5))" DISPLAY" INTO :ch5 FROM NO_DUCK;" EXECSQLSELECT CAST (-ALBATROSS AS CHAR (5)) INTO :ch5 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch5 should be '0E0 '; its value is '" ch5 "'" if (ch5 NOT = "0E0 ") then MOVE 0 TO flag END-IF
* 9. Approximate numeric cast to string normalized; i.e., * starts with 1-9 (after any hypen), followed by period. * GR.5.b.i.2 GR.5.b.ii
MOVE"axbxcxdxex"TO ch10 DISPLAY"SELECT CAST (0230E-1 AS CHAR (10)) INTO :ch10" DISPLAY" FROM HU.ECCO;" EXECSQLSELECT CAST (0230E-1 AS CHAR (10)) INTO :ch10 FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be '2.3E1 '; its value is '",
ch10 "'" if (ch10 NOT = "2.3E1 ") then MOVE 0 TO flag END-IF
MOVE"axbxcxdxex"TO ch10 DISPLAY"SELECT CAST (0230E+1 AS CHAR (10)) INTO :ch10" DISPLAY" FROM HU.ECCO;" EXECSQLSELECT CAST (0230E+1 AS CHAR (10)) INTO :ch10 FROM HU.ECCO END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be '2.3E3 '; its value is '",
ch10 "'" if (ch10 NOT = "2.3E3 ") then MOVE 0 TO flag END-IF
* 10. An approximate numeric cast to string gives the shortest l * GR.5.b.i.2 * This is adequately covered in the other subtests.
* 11. Approximate numeric to string cast gives leading hypen for * negative numbers and negative exponent, no leading blanks * plus sign for non-negative numbers. GR.5.b.ii
DISPLAY"DELETE FROM NO_DUCK;" EXECSQLDELETEFROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
*Negative number, positive exponent *WHERE clause has 'merely comparable' data types
DISPLAY"UPDATE NO_DUCK" DISPLAY" SET OSPREY = CAST (ALBATROSS AS CHAR (10))" DISPLAY" WHERE GOOSE = CAST (SEAGULL AS NUMERIC (2));" EXECSQL UPDATE NO_DUCK SET OSPREY = CAST (ALBATROSS AS CHAR (10))
WHERE GOOSE = CAST (SEAGULL AS NUMERIC (2)) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
MOVE"xxxxxyyyyy"TO ch10 DISPLAY"SELECT OSPREY INTO :ch10" DISPLAY" FROM NO_DUCK;" EXECSQLSELECT OSPREY INTO :ch10 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be '-1.05E1 '; its value is '",
ch10 "'" if (ch10 NOT = "-1.05E1 ") then MOVE 0 TO flag END-IF
*Negative number, negative exponent
DISPLAY"UPDATE NO_DUCK SET ALBATROSS = -0.5;" EXECSQL UPDATE NO_DUCK SET ALBATROSS = -0.5 END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"UPDATE NO_DUCK" DISPLAY" SET OSPREY = CAST (ALBATROSS AS CHAR (10));" EXECSQL UPDATE NO_DUCK SET OSPREY = CAST (ALBATROSS AS CHAR (10)) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
MOVE"xxxxxyyyyy"TO ch10 DISPLAY"SELECT OSPREY INTO :ch10" DISPLAY" FROM NO_DUCK;" EXECSQLSELECT OSPREY INTO :ch10 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be '-5E-1 '; its value is '",
ch10 "'" if (ch10 NOT = "-5E-1 ") then MOVE 0 TO flag END-IF
*Positive number, negative exponent
DISPLAY"UPDATE NO_DUCK" DISPLAY" SET OSPREY = CAST (-ALBATROSS AS CHAR (10));" EXECSQL UPDATE NO_DUCK SET OSPREY = CAST (-ALBATROSS AS CHAR (10)) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
MOVE"xxxxxyyyyy"TO ch10 DISPLAY"SELECT OSPREY INTO :ch10" DISPLAY" FROM NO_DUCK;" EXECSQLSELECT OSPREY INTO :ch10 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"ch10 should be '5E-1 '; its value is '",
ch10 "'" if (ch10 NOT = "5E-1 ") then MOVE 0 TO flag END-IF
*Positive / positive already done
* 12. Approximate numeric to string cast raises SQLSTATE 22001 o * right truncation. GR.5.b.iii.4
DISPLAY"Expected value -5E-1 is too long for CHAR (4)
- " cast" DISPLAY"SELECT CAST (ALBATROSS AS CHAR (4)) INTO :ch10" DISPLAY" FROM NO_DUCK;" EXECSQLSELECT CAST (ALBATROSS AS CHAR (4)) INTO :ch10 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLCODE should be < 0; its value is ", SQL-COD if (SQLCODE NOT < 0) then MOVE 0 TO flag END-IF if (SQLCODE NOT < 0 AND SQLCODE NOT = 100) then DISPLAY"ch10 should not be returned; its value is ",
ch10 END-IF DISPLAY"SQLSTATE should be 22001; its value is ", SQLSTATE if (SQLSTATE NOT = "22001") then MOVE 0 TO flag END-IF
* 13. Cast of literal NULL yields NULL value. GR.2.a
DISPLAY"DECLARE L_OEUF CURSOR FOR" DISPLAY" SELECT CAST (NULL AS CHAR (10)), GOOSE FROM
- " NO_DUCK" DISPLAY" WHERE SEAGULL = 0" DISPLAY" UNION" DISPLAY" SELECT OSPREY, CAST (SEAGULL AS NUMERIC (4, 2))
- " FROM NO_DUCK" DISPLAY" WHERE GOOSE > 10000;" EXECSQL DECLARE L_OEUF CURSOR FOR SELECT CAST (NULL AS CHAR (10)), GOOSE FROM NO_DUCK
WHERE SEAGULL = 0
UNION SELECT OSPREY, CAST (SEAGULL AS NUMERIC (4, 2)) FROM
NO_DUCK
WHERE GOOSE > 10000 END-EXEC
MOVE 50 TO indic1 DISPLAY"FETCH L_OEUF INTO :ch10:indic1, :int1;" EXECSQL FETCH L_OEUF INTO :ch10:indic1, :int1 END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"indic1 should be -1; its value is ", indic1 if (indic1 NOT = -1) then MOVE 0 TO flag END-IF
* 14. Cast of column or parameter with NULL value yields NULL va * GR.2.a
MOVE"NOTNULL "TO ch10 COMPUTE indic1 = -1 DISPLAY"indic1 = -1" DISPLAY"UPDATE NO_DUCK SET GOOSE =" DISPLAY" CAST (:ch10:indic1 AS NUMERIC (2, 2));" EXECSQL UPDATE NO_DUCK SET GOOSE =
CAST (:ch10:indic1 AS NUMERIC (2, 2)) END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
MOVE 50 TO int1 DISPLAY"SELECT COUNT(*) INTO :int1" DISPLAY" FROM NO_DUCK WHERE GOOSE IS NULL;" EXECSQLSELECTCOUNT(*) INTO :int1 FROM NO_DUCK WHERE GOOSE ISNULLEND-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"int1 should be 1; its value is ", int1 if (int1 NOT = 1) then MOVE 0 TO flag END-IF
MOVE 50 TO indic1 DISPLAY"SELECT CAST (GOOSE AS INT) INTO :int1:indic1" DISPLAY" FROM NO_DUCK;" EXECSQLSELECT CAST (GOOSE AS INT) INTO :int1:indic1 FROM NO_DUCK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY"indic1 should be -1; its value is ", indic1 if (indic1 NOT = -1) then MOVE 0 TO flag END-IF
DISPLAY"ROLLBACK WORK;" EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"DROP TABLE NO_DUCK CASCADE;" EXECSQL DROP TABLE NO_DUCK CASCADE END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
DISPLAY"COMMIT WORK;" EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD PERFORM CHCKOK DISPLAY" "
if ( flag = 1 ) then DISPLAY" *** pass *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0846','pass','PCO') END-EXEC MOVE SQLCODE TO SQL-COD else DISPLAY" dml149.pco *** fail *** " EXECSQLINSERTINTO HU.TESTREPORT
VALUES('0846','fail','PCO') END-EXEC MOVE SQLCODE TO SQL-COD COMPUTE errcnt = errcnt + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD ******************** END TEST0846 ******************** **** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
* **** Procedures for PERFORM statements
*Test SQLCODE and SQLSTATE for normal completion.
CHCKOK. 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 NORMSQ NOT = "00000") then MOVE 0 TO flag END-IF if (NORMSQ = "00000"AND NORMSQ NOT = SQLSTATE) then DISPLAY"Valid implementation-defined SQLSTATE accepted." END-IF
.
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 NORMSQ
MOVE 3 TO norm1 *subclass begins in position 3 of char array NORMSQ *valid subclass begins with 5-9, I-Z, end of ALPNUM table PERFORMVARYING norm2 FROM 14 BY 1 UNTIL norm2 > 36 if (NORMSQX(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQX(norm1) END-IF END-PERFORM
*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) if (NORMSQ = SQLSTATE) then GOTO EXIT-NOSUBCLASS END-IF
MOVE 4 TO norm1 *examining position 4 of char array NORMSQ *valid characters are 0-9, A-Z PERFORMVARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36 if (NORMSQX(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQX(norm1) END-IF END-PERFORM
MOVE 5 TO norm1 *valid characters are 0-9, A-Z *examining position 5 of char array NORMSQ PERFORMVARYING norm2 FROM 1 BY 1 UNTIL norm2 > 36 if (NORMSQX(norm1) = ALPNUM(norm2)) then MOVE"0"TO NORMSQX(norm1) END-IF END-PERFORM
*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 (NORMSQX(1) = "0"AND NORMSQX(2) = "1") then MOVE"0"TO NORMSQX(2) END-IF
.
EXIT-NOSUBCLASS. EXIT.
¤ 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.0.9Bemerkung:
(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.