* 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/05/05 EMBEDDED C LANGUAGE * X/Open SQL VALIDATION ALPHA TEST SUITE V1.0 * * XOP709.PCO * WRITTEN BY: Colin O'Driscoll * * X/O SQL Escape Clause Processing * * REFERENCES * X/Open CAE SQL Specification * Section 7.2.1 * * <embedded SQL C program> * * DATE PROGRAM LAST CHANGED 2.11.94 * ****************************************************************
*should execute successfully EXECSQLSELECTCOUNT(*) INTO :c FROM WARNING END-EXEC.
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK if (NORMSQ2 NOT = "00000"AND SQLCODE NOT = 0) then COMPUTE errflg = errflg + 1 END-IF DISPLAY"==============================================="
MOVE 99999 TO SQLCODE MOVE"xopen"TO SQLSTATE
*escape clause should be defined by the vedor and should work EXECSQLSELECT COUNT(*) INTO :c FROM STAFF WHERE SUBSTR(EMPNAME,1,3) = 'Ali' END-EXEC
* substitute your vendor and product name above * substitute your SUBSTRING function above
MOVE SQLCODE TO SQL-COD
*if above code has been executed correctly then SQLCODE *and SQLSTATE should not remain unchanged
DISPLAY"SQLCODE SHOULD BE 0 IT IS" SQL-COD DISPLAY"SQLSTATE SHOULD BE '00000' IT IS " SQLSTATE
IF (SQLCODE = 99999 AND SQLSTATE = "xopen") THEN DISPLAY"***Problem found in TEST STEP NUMBER 2 ***" ADD 1 TO errflg END-IF DISPLAY"==============================================="
MOVE 99999 TO SQLCODE MOVE"xopen"TO SQLSTATE *escape clause should be skipped EXECSQL set current time = 'abc'
-- VENDOR(NO MATCH),
-- PRODUCT(MATCH NOT),
-- This is junk END-EXEC * make no substitution in the above line: It's junk
MOVE SQLCODE TO SQL-COD
*if above code has not been executed correctly then SQLCODE *and SQLSTATE should remain unchanged
DISPLAY"SQLCODE SHOULD BE 99999 IT IS", SQL-COD DISPLAY"SQLSTATE SHOULD BE xopen IT IS ", SQLSTATE
IF (SQLCODE NOT = 99999 OR SQLSTATE NOT = "xopen") THEN DISPLAY"***Problem found in TEST STEP NUMBER 3 ***" ADD 1 TO errflg END-IF DISPLAY"=============================================" EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"=============================================" DISPLAY"Number of errors detected = ", errflg DISPLAY"Maximum number of errors is 3"
EXECSQL ROLLBACK WORK END-EXEC MOVE SQLCODE TO SQL-COD
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
******************** END TEST 0709 ******************* ****** 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 NOT = SQLSTATE) then PERFORM nosubody END-IF.
nosubody. *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. *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 if (SQLCODE NOT = 0 AND 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.15 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.