* 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 MOVESQLCODETO SQL-COD if (uid NOT = uidx) then DISPLAY"ERROR: User ", uid " expected. User ", uidx "
- " connected" STOPRUN END-IF MOVE0TO 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
MOVE1TO 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"================================================="
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD *Prepare the database for the test EXECSQL DROP TABLE INDEXTEST END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD EXECSQL CREATE TABLE INDEXTEST
(COL1 CHAR(1), COL2 DECIMAL) END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD EXECSQL DROP INDEX EMPIND END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
MOVE0TO errflg MOVE"x"TO SQLSTATE
EXECSQL CREATE INDEX EMPIND ON STAFF(EMPNAME ASC) END-EXEC MOVESQLCODETO 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 EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE INDEX EMPIND ON STAFF(EMPNAME) END-EXEC MOVESQLCODETO 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 EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD EXECSQL DROP INDEX EMPIND END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC
DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE INDEX EMPIND ON STAFF(EMPNUM,EMPNAME DESC) END-EXEC MOVESQLCODETO 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
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE INDEX EMPIND ON STAFF(EMPNUM,EMPNAME) END-EXEC MOVESQLCODETO 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 EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD EXECSQL DROP INDEX EMPIND END-EXEC MOVESQLCODETO SQL-COD EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD DISPLAY"=================================================" MOVE"x"TO SQLSTATE
EXECSQL CREATE INDEX EMPIND ON NOT_A_TABLE(NOT_A_COLUMN) END-EXEC MOVESQLCODETO 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
EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE INDEX XXX ON STAFF(NOT_A_COLUMN) END-EXEC MOVESQLCODETO 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
* CREATE TABLE INDEXTEST(COL1 CHAR(1), COL2 DECIMAL); MOVE0TO i PERFORM P50 UNTIL i > 9 EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD EXECSQL CREATE UNIQUE INDEX COLIND ON INDEXTEST(COL1) END-EXEC MOVESQLCODETO 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 EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"=================================================" MOVE"x"TO SQLSTATE EXECSQL CREATE UNIQUE INDEX COLIND ON INDEXTEST(COL2) END-EXEC MOVESQLCODETO SQL-COD DISPLAY"SQLSTATE should be '00000'" DISPLAY"SQLSTATE is " SQLSTATE " " EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD EXECSQLINSERTINTO INDEXTEST VALUES ('B', 0) END-EXEC MOVESQLCODETO 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 MOVESQLCODETO 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 MOVESQLCODETO 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 EXECSQLCOMMIT WORK END-EXEC MOVESQLCODETO SQL-COD
DISPLAY"=================================================" DISPLAY"number of errors detected = ", errflg " " DISPLAY"### maximum number of errors is 10 ###"
******************** 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 MOVE3TO norm1 MOVE14TO norm2 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD1TO 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)
MOVE4TO norm1 *examining position 4 of char array NORMSQ MOVE1TO norm2 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD1TO norm2 END-PERFORM MOVE5TO norm1 *examining position 5 of char array NORMSQ MOVE1TO norm2 PERFORMUNTIL norm2 > 36 if (NORMSQ(norm1) = ALPNUM3(norm2)) then MOVE"0"TO NORMSQ(norm1) END-IF ADD1TO 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.
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 und die Messung sind noch experimentell.