* DISCLAIMER: * This program was reviewed by employees of NIST for * conformance to the SQL standards. * NIST assumes no responsibility for any party's use of * this program.
* X/Open and the 'X' symbol are registered trademarks of X/Open Company * Limited in the UK and other countries.
**************************************************************** * * COMMENT SECTION * * DATE 1994/06/21 EMBEDDED COBOL LANGUAGE * X/Open SQL VALIDATION TEST SUITE V6.0 * * XOP712.PCO * WRITTEN BY: Phil Brown * Exists only in Embedded COBOL version * * This program tests the data type mapping for COBOL data * types S9(m)V9(n) onto SQL data types DECIMAL(m+n,n) * and COMP-3 onto SQL data types SMALLINT, INT and DECIMAL * * REFERENCES * International Standard 9075:1992, Database language SQL * * Sub-clause 6.1, <data type> * Sub-clause 19.5, <embedded SQL COBOL program>
* X/Open CAE Specification C201, * Structured Query Language (SQL)
* Section 4.1.3, Data Types and embedded Host variables
* DATE LAST CHANGED 1/11/94 * ****************************************************************
MOVE"XOPEN1"TO uid CALL"AUTHID"USING uid MOVE"not logged in, not"TO uidx EXECSQLSELECT USER INTO :uidx FROM XOPEN1.ECCO END-EXEC if (uid NOT = uidx) then DISPLAY"ERROR: User " uid " expected." DISPLAY"User " uidx " connected." STOPRUN END-IF
MOVE 0 TO errcnt DISPLAY"X/OPEN Extensions SQL Test Suite, V6.0, Embedded
- "COBOL, xop712.pco" DISPLAY" " 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 DISPLAY" "
******************** BEGIN TEST0712 *******************
EXECSQL FETCH DATA1 INTO :s903, :s9v914, :s915, :sv915 END-EXEC MOVE SQLCODE TO SQLCOD * DISPLAY" " DISPLAY"FETCH row 2" PERFORM CHCKOK IF
(NORMSQ2 NOT = "00000"AND SQLCOD NOT = 0) OR
s903 NOT = 238, OR
s9v914 NOT = 8.88888888345777, OR
s915 NOT = -456789112347702, OR
sv915 NOT = -.3333 THENADD 1 TO erracc DISPLAY"* fail *".
EXECSQL FETCH DATA1 INTO :s903, :s9v914, :s915, :sv915 END-EXEC MOVE SQLCODE TO SQLCOD * DISPLAY" " DISPLAY"FETCH row 3" PERFORM CHCKOK IF
(NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) OR
s903 NOT = 456, OR
s9v914 NOT = 0.12345678912345, OR
s915 NOT = 543210987654321, OR
sv915 NOT = .123456789012345 THENADD 1 TO erracc DISPLAY"* fail *".
EXECSQL FETCH DATA1 INTO :s903, :s9v914, :s915, :sv915 END-EXEC MOVE SQLCODE TO SQLCOD
DISPLAY" " DISPLAY"FETCH row 4" PERFORM CHCKOK IF
(NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) OR
s903 NOT = 999, OR
s9v914 NOT = 9.99999999999999, OR
s915 NOT = 999999999999999, OR
sv915 NOT = .999999999999999 THENADD 1 TO erracc DISPLAY"* fail *".
DISPLAY"SELECT successfully inserted row" EXECSQLSELECT * INTO :s903, :s9v914, :s915, :sv915 FROM TV
WHERE DEC3 = 1 END-EXEC MOVE SQLCODE TO SQLCOD PERFORM CHCKOK
IF
(NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) OR
s903 NOT = 1, OR
s9v914 NOT = -0.11111222223333, OR
s915 NOT = -123, OR
sv915 NOT = -0.111112222233333 THENADD 1 TO erracc DISPLAY"* fail *". DISPLAY "SELECT Single Row - success expected." DISPLAY"SQLSTATE = ", SQLSTATE " SQLCODE = " SQLCOD. DISPLAY"Values retrieved:" DISPLAY s903, " ", s9v914, " ", s915, " ", sv915.
* Attempt to retrieve a non-existent row
MOVE 555 TO s903 MOVE 7.003 TO s9v914 MOVE +44612286333 TO s915 MOVE -0.44612369877 TO sv915.
MOVE"FILLX"TO SQLSTATE MOVE 99999 TO SQLCODE.
DISPLAY" " DISPLAY"SELECT missing (failed INSERT) row" EXECSQLSELECT * INTO :s903, :s9v914, :s915, :sv915 FROM TV
WHERE DEC3 = -123 END-EXEC
PERFORM NOSUBCLASS THROUGH P213. IF
(NORMSQ2 NOT = "02000"AND SQLCODE NOT = 100) OR
s903 NOT = 555, OR
s9v914 NOT = 7.003, OR
s915 NOT = 44612286333, OR
sv915 NOT = -0.44612369877 THENADD 1 TO erracc DISPLAY"* fail *". MOVE SQLCODE TO SQLCOD DISPLAY "SELECT Single Row - failure expected." DISPLAY"SQLSTATE = ", SQLSTATE " SQLCODE = " SQLCOD. DISPLAY" "
EXECSQL FETCH DATA2 INTO
:s95c3, :s9v914c3, :s910c3, :sv915c3 END-EXEC. MOVE SQLCODE TO SQLCOD.
MOVE s95c3 TO s95d MOVE s9v914c3 TO s9v914d MOVE s910c3 TO s910d MOVE sv915c3 TO sv915d. DISPLAY" " DISPLAY"FETCH row 1" PERFORM CHCKOK DISPLAY "values = " s95d " ", s9v914d " ", s910d " ", sv915d. DISPLAY"Status = " SQLSTATE " " SQLCOD. IF
(NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) OR
s95c3 NOT = -32767, OR
s9v914c3 NOT = -9.99999999999999, OR
s910c3 NOT = +1234554321, OR
sv915c3 NOT = -.999999999999999 THENADD 1 TO erracc DISPLAY"* fail *".
MOVE"YYYYY"TO SQLSTATE MOVE 999999 TO SQLCODE. EXECSQLSELECT * INTO :s95c3, :s9v914c3, :s910c3, :sv915c3 FROM TU
WHERE SMINT = 1 END-EXEC MOVE SQLCODE TO SQLCOD
DISPLAY" " PERFORM CHCKOK IF
(NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) OR
s95c3 NOT = 1, OR
s9v914c3 NOT = 1.1, OR
s910c3 NOT = -12345, OR
sv915c3 NOT = -0.111112222233333 THENADD 1 TO erracc DISPLAY"* fail *".
MOVE 32567 TO s95c3 MOVE 7.003 TO s9v914c3 MOVE +2147228633 TO s910c3 MOVE -0.44612369877 TO sv915c3. MOVE"STATE"TO SQLSTATE MOVE 999999 TO SQLCODE.
EXECSQLSELECT * INTO :s95c3, :s9v914c3, :s910c3, :sv915c3 FROM TU
WHERE SMINT = -123 END-EXEC
PERFORM NOSUBCLASS THROUGH P213. IF
(NORMSQ2 NOT = "02000"AND SQLCODE NOT = 100) OR
s95c3 NOT = 32567, OR
s9v914c3 NOT = 7.003, OR
s910c3 NOT = 2147228633, OR
sv915c3 NOT = -0.44612369877 THENADD 1 TO erracc DISPLAY"* fail *".
******************** END TEST0724 *******************
****** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0 STOPRUN.
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 SQLSTORE *subclass begins in position 3 of char array NORMSQ MOVE 3 TO norm1 MOVE 14 TO norm2 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2 END-PERFORM MOVE SQLS2 TO NORMSQ2 if (NORMSQ2 = SQLSTATE) then GOTO P213 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 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2 END-PERFORM MOVE 5 TO norm1 *examining position 5 of char array NORMSQ MOVE 1 TO norm2 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD 1 TO norm2 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 (NORMSQ(1) = "0"AND NORMSQ(2) = "1") then MOVE"0"TO NORMSQ(2) END-IF MOVE SQLS2 TO NORMSQ2.
P213.
*Test SQLCODE and SQLSTATE for normal completion
CHCKOK. MOVE 1 TO flag DISPLAY"SQLCODE should be 0; its value is ", SQLCOD DISPLAY"SQLSTATE should be 00000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THROUGH P213. if (SQLCODE NOT = 0 OR NORMSQ2 NOT = "00000") then MOVE 0 TO flag END-IF if (flag = 1 AND NORMSQ2 NOT = SQLSTATE) then DISPLAY"Valid implementation defined SQLSTATE accepted." END-IF
.
¤ Dauer der Verarbeitung: 0.5 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.