* 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/04 EMBEDDED C LANGUAGE * X/Open SQL VALIDATION TEST SUITE V6.0 * * XOP703.PC * WRITTEN BY: Colin O'Driscoll * * CREATE INDEX, check for success when creating an index on * existing table * * REFERENCES * X/Open CAE SQL Specification * Section 5.3.3 CREATE INDEX * * <embedded SQL C program> * Date program last changed 31.10.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 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"X/OPEN Extensions SQL Test Suite, V6.0, Embedded
- "COBOL, xop703.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
MOVE 1 TO flag
******************** BEGIN TEST0703 *******************
DISPLAY" TEST0703 " DISPLAY"X/O,CREATE INDEX on existent/non-existent tables" DISPLAY" X/OPEN CAE SQL SECTION 5.3.3 " DISPLAY" - - - - - - - - - - - - - - - - - - -" DISPLAY"### CREATE INDEX EMPIND ON STAFF(EMPNAME ASC) ;" DISPLAY"### CREATE INDEX EMPIND ON STAFF(EMPNAME);" DISPLAY"### DROP INDEX EMPIND;" DISPLAY"### CREATE INDEX EMPIND ON STAFF(EMPNUM,EMPNAME" " DESC);" DISPLAY"### CREATE INDEX EMPIND ON STAFF(EMPNUM,EMPNAME);" DISPLAY"### CREATE INDEX EMPIND ON" " NOT_A_TABLE(NOT_A_COLUMN);" DISPLAY"### CREATE INDEX XXX ON STAFF(NOT_A_COLUMN);" DISPLAY"### INSERT INTO INDEXTEST VALUES ('A', :i);" DISPLAY"### CREATE UNIQUE INDEX COLIND ON
- " INDEXTEST(COL1);" DISPLAY"### CREATE UNIQUE INDEX COLIND ON
- " INDEXTEST(COL2);" DISPLAY"### INSERT INTO INDEXTEST VALUES ('B', 0);" DISPLAY"### INSERT INTO INDEXTEST VALUES ('B', NULL);" DISPLAY"### INSERT INTO INDEXTEST VALUES ('B', NULL);" DISPLAY"================================================="
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD *Prepare the database for the test EXECSQL DROP TABLE INDEXTEST END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL CREATE TABLE INDEXTEST
(COL1 CHAR(1), COL2 DECIMAL) END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL DROP INDEX EMPIND END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
MOVE 0 TO errflg MOVE"x"TO SQLSTATE
EXECSQL CREATE INDEX EMPIND ON STAFF(EMPNAME ASC) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE SHOULD BE '00000' IT IS " SQLSTATE PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "00000" ) then DISPLAY"*** Problem found (TEST STEP NUMBER 1) ! *** " COMPUTE errflg = errflg + 1 END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE INDEX EMPIND ON STAFF(EMPNAME) END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"SQLSTATE should be 'S0011'" DISPLAY"SQLSTATE is ", SQLSTATE
if (SQLSTATE NOT = "S0011") then DISPLAY"*** Problem found (TEST STEP NUMBER 2) ! *** " COMPUTE errflg = errflg + 1 END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL DROP INDEX EMPIND END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC
DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE INDEX EMPIND ON STAFF(EMPNUM,EMPNAME DESC) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE SHOULD BE '00000' IT IS " SQLSTATE PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "00000") then DISPLAY"*** Problem found (TEST STEP NUMBER 3) ! *** " COMPUTE errflg = errflg + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE INDEX EMPIND ON STAFF(EMPNUM,EMPNAME) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be 'S0011'" DISPLAY"SQLSTATE is ", SQLSTATE if (SQLSTATE NOT = "S0011") then DISPLAY"*** Problem found (TEST STEP NUMBER 4) ! *** " COMPUTE errflg = errflg + 1 END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL DROP INDEX EMPIND END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"=================================================" MOVE"x"TO SQLSTATE
EXECSQL CREATE INDEX EMPIND ON NOT_A_TABLE(NOT_A_COLUMN) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be 'S0002'" DISPLAY"SQLSTATE is ", SQLSTATE
if (SQLSTATE NOT = "S0002") then DISPLAY"*** Problem found (TEST STEP NUMBER 5) ! *** " COMPUTE errflg = errflg + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE INDEX XXX ON STAFF(NOT_A_COLUMN) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be 'S0002'" DISPLAY"SQLSTATE is ", SQLSTATE if (SQLSTATE NOT = "S0002") then DISPLAY"*** Problem found (TEST STEP NUMBER 6) ! ***" COMPUTE errflg = errflg + 1 END-IF
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
* CREATE TABLE INDEXTEST(COL1 CHAR(1), COL2 DECIMAL); MOVE 0 TO i PERFORM P50 UNTIL i > 9 EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQL CREATE UNIQUE INDEX COLIND ON INDEXTEST(COL1) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be '23000'" DISPLAY"SQLSTATE is " SQLSTATE " " PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "23000") then DISPLAY"*** Problem found (TEST STEP NUMBER 7) ! *** " COMPUTE errflg = errflg + 1 END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE UNIQUE INDEX COLIND ON INDEXTEST(COL2) END-EXEC MOVE SQLCODE TO SQL-COD DISPLAY"SQLSTATE should be '00000'" DISPLAY"SQLSTATE is " SQLSTATE " " EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD EXECSQLINSERTINTO INDEXTEST VALUES ('B', 0) END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"SQLSTATE is ", SQLSTATE " " DISPLAY"SQLSTATE should be '23000'" PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "23000") then DISPLAY"*** Problem found (TEST STEP NUMBER 8) ! *** " COMPUTE errflg = errflg + 1 END-IF DISPLAY"================================================" MOVE"x"TO SQLSTATE EXECSQLINSERTINTO INDEXTEST VALUES ('B', NULL) END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"SQLSTATE is ", SQLSTATE " " DISPLAY"SQLSTATE should be '00000'" PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "00000") then DISPLAY"*** Problem found (TEST STEP NUMBER 9) ! ***" COMPUTE errflg = errflg + 1 END-IF DISPLAY"================================================" MOVE"x"TO SQLSTATE EXECSQLINSERTINTO INDEXTEST VALUES ('B', NULL) END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"SQLSTATE should be '23000'" DISPLAY"SQLSTATE is ", SQLSTATE PERFORM NOSUBCLASS THROUGH P213. if (NORMSQ2 NOT = "23000") then DISPLAY"*** Problem found (TEST STEP NUMBER 10) ! ***" COMPUTE errflg = errflg + 1 END-IF EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
DISPLAY"=================================================" DISPLAY"number of errors detected = ", errflg " " DISPLAY"### maximum number of errors is 10 ###"
EXECSQL COMMIT WORK END-EXEC MOVE SQLCODE TO SQL-COD
******************** END TEST0703 *******************
****** 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
* **** Procedures for PERFORM statements
P50. EXECSQLINSERTINTO INDEXTEST VALUES ('A', :i) END-EXEC MOVE SQLCODE TO SQL-COD ADD 1 TO i
.
¤ Dauer der Verarbeitung: 0.2 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.