IDENTIFICATION DIVISION.
PROGRAM-ID. DML135.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. xyz.
OBJECT-COMPUTER. xyz.
DATA DIVISION.
WORKING-STORAGE SECTION.
* Standard COBOL (file "DML135.SCO") calling SQL
* procedures in file "DML135.MCO".
****************************************************************
*
* COMMENT SECTION
*
* DATE 1994/8/30 STANDARD 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.
*
* DML135.SCO
* WRITTEN BY: David W. Flater
* TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE
*
* This program tests multiple TSQL features together.
*
* REFERENCES
* FIPS PUB 127-2 14.1 Transitional SQL
* ANSI SQL-1992
*
****************************************************************
* EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 SQLCODE PIC S9(9) COMP.
01 SQLSTATE PIC X(5).
01 uid PIC X(18).
01 uidx PIC X(18).
01 int1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 tchar PIC X(6).
01 longst PIC X(240).
01 tname PIC X(18).
01 ttype PIC X(10).
01 cname PIC X(18).
01 indic1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
01 flt1 PIC S9(4)V9(4) DISPLAY SIGN LEADING SEPARATE.
01 emnum PIC X(3).
01 ename PIC X(20).
01 city PIC X(15).
* EXEC SQL END DECLARE SECTION END-EXEC
01 norm1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 norm2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 ALPNUM-TABLE VALUE IS
"01234ABCDEFGH56789IJKLMNOPQRSTUVWXYZ".
05 ALPNUM PIC X OCCURS 36 TIMES.
01 NORMSQ.
05 NORMSQX PIC X OCCURS 5 TIMES.
01 errcnt PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
*date_time declaration
01 TO-DAY PIC 9(6).
01 THE-TIME PIC 9(8).
01 flag PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
PROCEDURE DIVISION.
P0.
MOVE "FLATER " TO uid
CALL "AUTHID" USING uid
MOVE "not logged in, not" TO uidx
* EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO;
CALL "SUB1" USING SQLCODE SQLSTATE uidx
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB2" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
if (uid NOT = uidx) then
DISPLAY "ERROR: User ", uid " expected. User ", uidx "
- " connected"
STOP RUN
END-IF
MOVE 0 TO errcnt
DISPLAY
"SQL Test Suite, V6.0, Module COBOL, dml135.sco"
DISPLAY
"59-byte ID"
DISPLAY "TEd Version #"
*date_time print
ACCEPT TO-DAY FROM DATE
ACCEPT THE-TIME FROM TIME
DISPLAY "Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
******************** BEGIN TEST0692 *******************
MOVE 1 TO flag
DISPLAY " TEST0692 "
DISPLAY "Many TSQL features #3: enhanced proj/works"
DISPLAY "References:"
DISPLAY " F# 1 -- Dynamic SQL"
DISPLAY " F# 3 -- Basic schema manipulation"
DISPLAY " F# 13 -- Grouped operations"
DISPLAY " F# 15 -- Lowercase identifiers"
DISPLAY " F# 16 -- PRIMARY KEY enhancement"
DISPLAY " F# 19 -- Referential delete actions"
DISPLAY " F# 22 -- Explicit defaults"
DISPLAY " F# 24 -- Keyword relaxations"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
DISPLAY "CREATE TABLE ""Proj"" ("
DISPLAY " PNUM CHAR(3) PRIMARY KEY,"
DISPLAY " PNAME CHAR(20),"
DISPLAY " PTYPE CHAR(6) DEFAULT 'Code',"
DISPLAY " BUDGET DECIMAL(9) DEFAULT 10000,"
DISPLAY " CITY CHAR(15) DEFAULT 'Berlin');"
* EXEC SQL CREATE TABLE "Proj" (
* PNUM CHAR(3) PRIMARY KEY,
* PNAME CHAR(20),
* PTYPE CHAR(6) DEFAULT 'Code',
* BUDGET DECIMAL(9) DEFAULT 10000,
* CITY CHAR(15) DEFAULT 'Berlin');
CALL "SUB3" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB4" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW ""PTypes"" (""TYPE"", NUM) AS"
DISPLAY " SELECT PTYPE, COUNT(*) FROM ""Proj"""
DISPLAY " GROUP BY PTYPE;"
* EXEC SQL CREATE VIEW "PTypes" ("TYPE", NUM) AS
* SELECT PTYPE, COUNT(*) FROM "Proj"
* GROUP BY PTYPE;
CALL "SUB5" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB6" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW PTYPES AS"
DISPLAY " SELECT * FROM ""PTypes"""
DISPLAY " WHERE NUM > 1;"
* EXEC SQL CREATE VIEW PTYPES AS
* SELECT * FROM "PTypes"
* WHERE NUM > 1;
CALL "SUB7" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB8" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE TABLE ""Works"" ("
DISPLAY " EMPNUM CHAR(3),"
DISPLAY " PNUM CHAR(3)"
DISPLAY " REFERENCES ""Proj"" ON DELETE CASCADE,"
DISPLAY " HOURS DECIMAL(5),"
DISPLAY " PRIMARY KEY (EMPNUM,PNUM));"
* EXEC SQL CREATE TABLE "Works" (
* EMPNUM CHAR(3),
* PNUM CHAR(3)
* REFERENCES "Proj" ON DELETE CASCADE,
* HOURS DECIMAL(5),
* PRIMARY KEY (EMPNUM,PNUM));
CALL "SUB9" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB10" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW ""PStaff"" (PNUM, NUM) AS"
DISPLAY " SELECT PNUM, COUNT(*) FROM ""Works"""
DISPLAY " WHERE HOURS >= 20"
DISPLAY " GROUP BY PNUM;"
* EXEC SQL CREATE VIEW "PStaff" (PNUM, NUM) AS
* SELECT PNUM, COUNT(*) FROM "Works"
* WHERE HOURS >= 20
* GROUP BY PNUM;
CALL "SUB11" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB12" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO ""Proj"""
DISPLAY " SELECT * FROM Hu.Proj;"
* EXEC SQL INSERT INTO "Proj"
* SELECT * FROM Hu.Proj;
CALL "SUB13" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO ""Proj"" (PNUM, PNAME, BUDGET)"
DISPLAY " VALUES ('P7', 'FROB', DEFAULT);"
* EXEC SQL INSERT INTO "Proj" (PNUM, PNAME, BUDGET)
* VALUES ('P7', 'FROB', DEFAULT);
CALL "SUB14" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO ""Proj"" (PNUM, PNAME, BUDGET)"
DISPLAY " VALUES ('P8', 'BORF', 15000);"
* EXEC SQL INSERT INTO "Proj" (PNUM, PNAME, BUDGET)
* VALUES ('P8', 'BORF', 15000);
CALL "SUB15" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO ""Proj"" (PNUM, PNAME, PTYPE)"
DISPLAY " VALUES ('P9', 'FORB', DEFAULT);"
* EXEC SQL INSERT INTO "Proj" (PNUM, PNAME, PTYPE)
* VALUES ('P9', 'FORB', DEFAULT);
CALL "SUB16" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO ""Proj"" VALUES"
DISPLAY " ('P10', 'ROBF', 'Docs', 1000, 'Sofia');"
* EXEC SQL INSERT INTO "Proj" VALUES
* ('P10', 'ROBF', 'Docs', 1000, 'Sofia');
CALL "SUB17" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO ""Works"""
DISPLAY " SELECT * FROM Hu.Works;"
* EXEC SQL INSERT INTO "Works"
* SELECT * FROM Hu.Works;
CALL "SUB18" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE C13511 CURSOR FOR"
DISPLAY " SELECT * FROM PTYPES ORDER BY NUM;"
* EXEC SQL DECLARE C13511 CURSOR FOR
* SELECT * FROM PTYPES ORDER BY NUM END-EXEC
DISPLAY "OPEN C13511;"
* EXEC SQL OPEN C13511;
CALL "SUB19" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE "xxxxxx" TO tchar
COMPUTE int1 = -1
DISPLAY "FETCH C13511 INTO :tchar, :int1;"
* EXEC SQL FETCH C13511 INTO :tchar, :int1;
CALL "SUB20" USING SQLCODE SQLSTATE tchar int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tchar should be 'Test '; its value is '",
tchar "'"
DISPLAY "int1 should be 2; its value is ", int1
if (tchar NOT = "Test " OR int1 NOT = 2) then
MOVE 0 TO flag
END-IF
MOVE "xxxxxx" TO tchar
COMPUTE int1 = -1
DISPLAY "FETCH C13511 INTO :tchar, :int1;"
* EXEC SQL FETCH C13511 INTO :tchar, :int1;
CALL "SUB21" USING SQLCODE SQLSTATE tchar int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tchar should be 'Design'; its value is '",
tchar "'"
DISPLAY "int1 should be 3; its value is ", int1
if (tchar NOT = "Design" OR int1 NOT = 3) then
MOVE 0 TO flag
END-IF
MOVE "xxxxxx" TO tchar
COMPUTE int1 = -1
DISPLAY "FETCH C13511 INTO :tchar, :int1;"
* EXEC SQL FETCH C13511 INTO :tchar, :int1;
CALL "SUB22" USING SQLCODE SQLSTATE tchar int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tchar should be 'Code '; its value is '",
tchar "'"
DISPLAY "int1 should be 4; its value is ", int1
if (tchar NOT = "Code " OR int1 NOT = 4) then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH C13511 INTO :tchar, :int1;"
* EXEC SQL FETCH C13511 INTO :tchar, :int1;
CALL "SUB23" USING SQLCODE SQLSTATE tchar int1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 100 OR NORMSQ NOT = "02000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "02000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
DISPLAY " "
DISPLAY "CLOSE C13511;"
* EXEC SQL CLOSE C13511;
CALL "SUB24" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Grouped dynamic cursor over a grouped view
* EXEC SQL DELETE FROM CONCATBUF;
CALL "SUB25" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO CONCATBUF VALUES (
* 'SELECT NUM, COUNT(*) FROM "PStaff"' ||
* ' GROUP BY NUM ORDER BY NUM'
* );
CALL "SUB26" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF;
CALL "SUB27" USING SQLCODE SQLSTATE longst
MOVE SQLCODE TO SQL-COD
DISPLAY "longst=""", longst """"
DISPLAY "PREPARE S13512 FROM :longst;"
* EXEC SQL PREPARE S13512 FROM :longst;
CALL "SUB28" USING SQLCODE SQLSTATE longst
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE C13512 CURSOR FOR S13512;"
* EXEC SQL DECLARE C13512 CURSOR FOR S13512 END-EXEC
DISPLAY "OPEN C13512;"
* EXEC SQL OPEN C13512;
CALL "SUB29" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13512 INTO :int1, :int2;"
* EXEC SQL FETCH C13512 INTO :int1, :int2;
CALL "SUB30" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
DISPLAY "int2 should be 2; its value is ", int2
if (int1 NOT = 1 OR int2 NOT = 2) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13512 INTO :int1, :int2;"
* EXEC SQL FETCH C13512 INTO :int1, :int2;
CALL "SUB31" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 2; its value is ", int1
DISPLAY "int2 should be 2; its value is ", int2
if (int1 NOT = 2 OR int2 NOT = 2) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13512 INTO :int1, :int2;"
* EXEC SQL FETCH C13512 INTO :int1, :int2;
CALL "SUB32" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4; its value is ", int1
DISPLAY "int2 should be 1; its value is ", int2
if (int1 NOT = 4 OR int2 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH C13512 INTO :int1, :int2;"
* EXEC SQL FETCH C13512 INTO :int1, :int2;
CALL "SUB33" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 100 OR NORMSQ NOT = "02000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "02000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
DISPLAY " "
DISPLAY "CLOSE C13512;"
* EXEC SQL CLOSE C13512;
CALL "SUB34" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Cascaded delete -- ditch all that costly Design work
DISPLAY "DELETE FROM ""Proj"" WHERE PTYPE = 'Design';"
* EXEC SQL DELETE FROM "Proj" WHERE PTYPE = 'Design'
* ;
CALL "SUB35" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "OPEN C13511;"
* EXEC SQL OPEN C13511;
CALL "SUB19" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE "xxxxxx" TO tchar
COMPUTE int1 = -1
DISPLAY "FETCH C13511 INTO :tchar, :int1;"
* EXEC SQL FETCH C13511 INTO :tchar, :int1;
CALL "SUB37" USING SQLCODE SQLSTATE tchar int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tchar should be 'Test '; its value is '",
tchar "'"
DISPLAY "int1 should be 2; its value is ", int1
if (tchar NOT = "Test " OR int1 NOT = 2) then
MOVE 0 TO flag
END-IF
MOVE "xxxxxx" TO tchar
COMPUTE int1 = -1
DISPLAY "FETCH C13511 INTO :tchar, :int1;"
* EXEC SQL FETCH C13511 INTO :tchar, :int1;
CALL "SUB38" USING SQLCODE SQLSTATE tchar int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tchar should be 'Code '; its value is '",
tchar "'"
DISPLAY "int1 should be 4; its value is ", int1
if (tchar NOT = "Code " OR int1 NOT = 4) then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH C13511 INTO :tchar, :int1;"
* EXEC SQL FETCH C13511 INTO :tchar, :int1;
CALL "SUB39" USING SQLCODE SQLSTATE tchar int1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 100 OR NORMSQ NOT = "02000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "02000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
DISPLAY " "
DISPLAY "CLOSE C13511;"
* EXEC SQL CLOSE C13511;
CALL "SUB40" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "OPEN C13512;"
* EXEC SQL OPEN C13512;
CALL "SUB29" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13512 INTO :int1, :int2;"
* EXEC SQL FETCH C13512 INTO :int1, :int2;
CALL "SUB42" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
DISPLAY "int2 should be 2; its value is ", int2
if (int1 NOT = 1 OR int2 NOT = 2) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13512 INTO :int1, :int2;"
* EXEC SQL FETCH C13512 INTO :int1, :int2;
CALL "SUB43" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4; its value is ", int1
DISPLAY "int2 should be 1; its value is ", int2
if (int1 NOT = 4 OR int2 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH C13512 INTO :int1, :int2;"
* EXEC SQL FETCH C13512 INTO :int1, :int2;
CALL "SUB44" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 100 OR NORMSQ NOT = "02000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "02000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
DISPLAY " "
DISPLAY "CLOSE C13512;"
* EXEC SQL CLOSE C13512;
CALL "SUB45" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "ROLLBACK;"
* EXEC SQL ROLLBACK;
CALL "SUB46" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*TEd hook ababababa
DISPLAY "DROP TABLE ""Proj"" CASCADE;"
* EXEC SQL DROP TABLE "Proj" CASCADE;
CALL "SUB47" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB48" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE ""Works"" CASCADE;"
* EXEC SQL DROP TABLE "Works" CASCADE;
CALL "SUB49" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB50" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*TEd hook zyzyzyzyzyz
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0692','pass','MCO');
CALL "SUB51" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml135.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0692','fail','MCO');
CALL "SUB52" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB53" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0692 ********************
******************** BEGIN TEST0693 *******************
MOVE 1 TO flag
DISPLAY " TEST0693 "
DISPLAY "Many TSQL features #4: enhanced INFO_SCHEM"
DISPLAY "References:"
DISPLAY " F# 2 -- Basic information schema"
DISPLAY " F# 3 -- Basic schema manipulation"
DISPLAY " F# 4 -- Joined table"
DISPLAY " F# 5 -- DATETIME data types"
DISPLAY " F# 11 -- Transaction isolation"
DISPLAY " F# 15 -- Lowercase identifiers"
DISPLAY " F# 22 -- Explicit defaults"
DISPLAY " F# 24 -- Keyword relaxations"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
*The Information Schema is defined to give a view to only the
*current catalog, so it is not necessary to join across
*TABLE_CAT.
DISPLAY "CREATE TABLE CreationTimes ("
DISPLAY " TABLE_SCHEM CHAR (50),"
DISPLAY " TABLE_NAME CHAR (50),"
DISPLAY " CREATE_TIME TIMESTAMP);"
* EXEC SQL CREATE TABLE CreationTimes (
* TABLE_SCHEM CHAR (50),
* TABLE_NAME CHAR (50),
* CREATE_TIME TIMESTAMP);
CALL "SUB54" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB55" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW TablesColumns AS"
DISPLAY " SELECT TABLE_SCHEM, TABLE_NAME,"
DISPLAY " TABLE_TYPE, COLUMN_NAME, CREATE_TIME"
DISPLAY " FROM Info_Schem.Tables"
DISPLAY " NATURAL JOIN Info_Schem.Columns"
DISPLAY " NATURAL JOIN CreationTimes;"
* EXEC SQL CREATE VIEW TablesColumns AS
* SELECT TABLE_SCHEM, TABLE_NAME,
* TABLE_TYPE, COLUMN_NAME, CREATE_TIME
* FROM Info_Schem.Tables
* NATURAL JOIN Info_Schem.Columns
* NATURAL JOIN CreationTimes;
CALL "SUB56" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB57" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Populate CreationTimes with data for all tables we wish to
*see -- the natural join will eliminate all others!
DISPLAY "INSERT INTO CREATIONTIMES VALUES"
DISPLAY " ('FLATER', 'CREATIONTIMES',"
DISPLAY " TIMESTAMP '1994-09-01 16:15:00');"
* EXEC SQL INSERT INTO CREATIONTIMES VALUES
* ('FLATER', 'CREATIONTIMES',
* TIMESTAMP '1994-09-01 16:15:00');
CALL "SUB58" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO CREATIONTIMES VALUES"
DISPLAY " ('FLATER', 'TABLESCOLUMNS', DEFAULT);"
* EXEC SQL INSERT INTO CREATIONTIMES VALUES
* ('FLATER', 'TABLESCOLUMNS', DEFAULT);
CALL "SUB59" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB60" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "SET TRANSACTION READ ONLY;"
* EXEC SQL SET TRANSACTION READ ONLY;
CALL "SUB61" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE C13521 CURSOR FOR"
DISPLAY " SELECT TABLE_NAME, TABLE_TYPE, COLUMN_NAME,"
DISPLAY " EXTRACT (HOUR FROM CREATE_TIME)"
DISPLAY " FROM TABLESCOLUMNS"
DISPLAY " ORDER BY TABLE_NAME, COLUMN_NAME"
DISPLAY " FOR READ ONLY;"
* EXEC SQL DECLARE C13521 CURSOR FOR
* SELECT TABLE_NAME, TABLE_TYPE, COLUMN_NAME,
* EXTRACT (HOUR FROM CREATE_TIME)
* FROM TABLESCOLUMNS
* ORDER BY TABLE_NAME, COLUMN_NAME
* FOR READ ONLY END-EXEC
DISPLAY "OPEN C13521;"
* EXEC SQL OPEN C13521;
CALL "SUB62" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE 99 TO int1
MOVE 99 TO indic1
MOVE "xxxxxxxxxxxxxxxxxx" TO tname
MOVE "xxxxxxxxxx" TO ttype
MOVE "xxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB63" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tname should be 'CREATIONTIMES '; its value is
- " '", tname "'"
DISPLAY "ttype should be 'BASE TABLE'; its value is '",
ttype "'"
DISPLAY "cname should be 'CREATE_TIME '; its value is
- " '", cname "'"
DISPLAY "int1 should be 16; its value is ", int1
DISPLAY "indic1 should be 0; its value is ", indic1
if (tname NOT = "CREATIONTIMES ") then
MOVE 0 TO flag
END-IF
if (ttype NOT = "BASE TABLE") then
MOVE 0 TO flag
END-IF
if (cname NOT = "CREATE_TIME ") then
MOVE 0 TO flag
END-IF
if (int1 NOT = 16 OR indic1 NOT = 0) then
MOVE 0 TO flag
END-IF
MOVE 99 TO int1
MOVE 99 TO indic1
MOVE "xxxxxxxxxxxxxxxxxx" TO tname
MOVE "xxxxxxxxxx" TO ttype
MOVE "xxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB64" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tname should be 'CREATIONTIMES '; its value is
- " '", tname "'"
DISPLAY "ttype should be 'BASE TABLE'; its value is '",
ttype "'"
DISPLAY "cname should be 'TABLE_NAME '; its value is
- " '", cname "'"
DISPLAY "int1 should be 16; its value is ", int1
DISPLAY "indic1 should be 0; its value is ", indic1
if (tname NOT = "CREATIONTIMES ") then
MOVE 0 TO flag
END-IF
if (ttype NOT = "BASE TABLE") then
MOVE 0 TO flag
END-IF
if (cname NOT = "TABLE_NAME ") then
MOVE 0 TO flag
END-IF
if (int1 NOT = 16 OR indic1 NOT = 0) then
MOVE 0 TO flag
END-IF
MOVE 99 TO int1
MOVE 99 TO indic1
MOVE "xxxxxxxxxxxxxxxxxx" TO tname
MOVE "xxxxxxxxxx" TO ttype
MOVE "xxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB65" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tname should be 'CREATIONTIMES '; its value is
- " '", tname "'"
DISPLAY "ttype should be 'BASE TABLE'; its value is '",
ttype "'"
DISPLAY "cname should be 'TABLE_SCHEM '; its value is
- " '", cname "'"
DISPLAY "int1 should be 16; its value is ", int1
DISPLAY "indic1 should be 0; its value is ", indic1
if (tname NOT = "CREATIONTIMES ") then
MOVE 0 TO flag
END-IF
if (ttype NOT = "BASE TABLE") then
MOVE 0 TO flag
END-IF
if (cname NOT = "TABLE_SCHEM ") then
MOVE 0 TO flag
END-IF
if (int1 NOT = 16 OR indic1 NOT = 0) then
MOVE 0 TO flag
END-IF
MOVE 99 TO indic1
MOVE "xxxxxxxxxxxxxxxxxx" TO tname
MOVE "xxxxxxxxxx" TO ttype
MOVE "xxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB66" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tname should be 'TABLESCOLUMNS '; its value is
- " '", tname "'"
DISPLAY "ttype should be 'VIEW '; its value is '",
ttype "'"
DISPLAY "cname should be 'COLUMN_NAME '; its value is
- " '", cname "'"
DISPLAY "indic1 should be -1; its value is ", indic1
if (tname NOT = "TABLESCOLUMNS ") then
MOVE 0 TO flag
END-IF
if (ttype NOT = "VIEW ") then
MOVE 0 TO flag
END-IF
if (cname NOT = "COLUMN_NAME ") then
MOVE 0 TO flag
END-IF
if (indic1 NOT = -1) then
MOVE 0 TO flag
END-IF
MOVE 99 TO indic1
MOVE "xxxxxxxxxxxxxxxxxx" TO tname
MOVE "xxxxxxxxxx" TO ttype
MOVE "xxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB67" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tname should be 'TABLESCOLUMNS '; its value is
- " '", tname "'"
DISPLAY "ttype should be 'VIEW '; its value is '",
ttype "'"
DISPLAY "cname should be 'CREATE_TIME '; its value is
- " '", cname "'"
DISPLAY "indic1 should be -1; its value is ", indic1
if (tname NOT = "TABLESCOLUMNS ") then
MOVE 0 TO flag
END-IF
if (ttype NOT = "VIEW ") then
MOVE 0 TO flag
END-IF
if (cname NOT = "CREATE_TIME ") then
MOVE 0 TO flag
END-IF
if (indic1 NOT = -1) then
MOVE 0 TO flag
END-IF
MOVE 99 TO indic1
MOVE "xxxxxxxxxxxxxxxxxx" TO tname
MOVE "xxxxxxxxxx" TO ttype
MOVE "xxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB68" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tname should be 'TABLESCOLUMNS '; its value is
- " '", tname "'"
DISPLAY "ttype should be 'VIEW '; its value is '",
ttype "'"
DISPLAY "cname should be 'TABLE_NAME '; its value is
- " '", cname "'"
DISPLAY "indic1 should be -1; its value is ", indic1
if (tname NOT = "TABLESCOLUMNS ") then
MOVE 0 TO flag
END-IF
if (ttype NOT = "VIEW ") then
MOVE 0 TO flag
END-IF
if (cname NOT = "TABLE_NAME ") then
MOVE 0 TO flag
END-IF
if (indic1 NOT = -1) then
MOVE 0 TO flag
END-IF
MOVE 99 TO indic1
MOVE "xxxxxxxxxxxxxxxxxx" TO tname
MOVE "xxxxxxxxxx" TO ttype
MOVE "xxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB69" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tname should be 'TABLESCOLUMNS '; its value is
- " '", tname "'"
DISPLAY "ttype should be 'VIEW '; its value is '",
ttype "'"
DISPLAY "cname should be 'TABLE_SCHEM '; its value is
- " '", cname "'"
DISPLAY "indic1 should be -1; its value is ", indic1
if (tname NOT = "TABLESCOLUMNS ") then
MOVE 0 TO flag
END-IF
if (ttype NOT = "VIEW ") then
MOVE 0 TO flag
END-IF
if (cname NOT = "TABLE_SCHEM ") then
MOVE 0 TO flag
END-IF
if (indic1 NOT = -1) then
MOVE 0 TO flag
END-IF
MOVE 99 TO indic1
MOVE "xxxxxxxxxxxxxxxxxx" TO tname
MOVE "xxxxxxxxxx" TO ttype
MOVE "xxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB70" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "tname should be 'TABLESCOLUMNS '; its value is
- " '", tname "'"
DISPLAY "ttype should be 'VIEW '; its value is '",
ttype "'"
DISPLAY "cname should be 'TABLE_TYPE '; its value is
- " '", cname "'"
DISPLAY "indic1 should be -1; its value is ", indic1
if (tname NOT = "TABLESCOLUMNS ") then
MOVE 0 TO flag
END-IF
if (ttype NOT = "VIEW ") then
MOVE 0 TO flag
END-IF
if (cname NOT = "TABLE_TYPE ") then
MOVE 0 TO flag
END-IF
if (indic1 NOT = -1) then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH C13521"
DISPLAY " INTO :tname, :ttype, :cname, :int1:indic1;"
* EXEC SQL FETCH C13521
* INTO :tname, :ttype, :cname, :int1:indic1;
CALL "SUB71" USING SQLCODE SQLSTATE
tname ttype cname int1 indic1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 100 OR NORMSQ NOT = "02000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "02000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
DISPLAY " "
DISPLAY "INSERT INTO CREATIONTIMES VALUES"
DISPLAY " ('FLATER', 'USIG', DEFAULT);"
* EXEC SQL INSERT INTO CREATIONTIMES VALUES
* ('FLATER', 'USIG', DEFAULT);
CALL "SUB72" USING SQLCODE SQLSTATE
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;"
* EXEC SQL ROLLBACK;
CALL "SUB73" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE CreationTimes CASCADE;"
* EXEC SQL DROP TABLE CreationTimes CASCADE;
CALL "SUB74" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT;"
* EXEC SQL COMMIT;
CALL "SUB75" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0693','pass','MCO');
CALL "SUB76" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml135.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0693','fail','MCO');
CALL "SUB77" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB78" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0693 ********************
******************** BEGIN TEST0694 *******************
MOVE 1 TO flag
DISPLAY " TEST0694 "
DISPLAY " Interval Arithmetic and Casts"
DISPLAY "References:"
DISPLAY " F# 5 -- DATETIME data types"
DISPLAY " F# 20 -- CAST functions"
DISPLAY " TC #2 5.3 -- Extended syntax of interval
- " strings"
DISPLAY " 6.15 FT.1 -- Syntax for subtracting two
- " datetimes"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
*you have: approximate numeric
*you want: interval hour to minute
*You can't cast an approximate numeric as an interval (6.10 SR.4
*you have: exact numeric
*you want: interval hour to minute
*You can't cast an exact numeric as an interval with more than o
*<datetime field> (6.10 SR.5).
* This is how you do it:
*1.9 * INTERVAL '1:00' HOUR TO MINUTE
*If you've only got one <datetime field> you can do this:
* CAST (CAST (1.9 AS NUMERIC (2, 1)) AS INTERVAL SECOND)
*but you're probably still better off to say
* 1.9 * INTERVAL '1.000000' SECOND
DISPLAY "CREATE TABLE WORKS ("
DISPLAY " EMPNUM CHAR (3) NOT NULL,"
DISPLAY " PNUM CHAR (3) NOT NULL,"
DISPLAY " HOURS DECIMAL (5),"
DISPLAY " UNIQUE(EMPNUM,PNUM));"
* EXEC SQL CREATE TABLE WORKS (
* EMPNUM CHAR (3) NOT NULL,
* PNUM CHAR (3) NOT NULL,
* HOURS DECIMAL (5),
* UNIQUE(EMPNUM,PNUM));
CALL "SUB79" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB80" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW PROJ_HOURS (PNUM, HOURS) AS"
DISPLAY " SELECT PNUM, AVG (HOURS) * INTERVAL '01:00' HOUR
- " TO MINUTE"
DISPLAY " FROM WORKS GROUP BY PNUM;"
* EXEC SQL CREATE VIEW PROJ_HOURS (PNUM, HOURS) AS
* SELECT PNUM, AVG (HOURS) * INTERVAL '01:00' HOUR TO
* MINUTE
* FROM WORKS GROUP BY PNUM;
CALL "SUB81" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB82" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW PROJ_HOURS2 (PNUM, HOURS) AS"
DISPLAY " SELECT PNUM,"
DISPLAY " AVG (CAST (CAST (HOURS AS INTERVAL HOUR)"
DISPLAY " AS INTERVAL HOUR TO MINUTE))"
DISPLAY " FROM WORKS GROUP BY PNUM;"
* EXEC SQL CREATE VIEW PROJ_HOURS2 (PNUM, HOURS) AS
* SELECT PNUM,
* AVG (CAST (CAST (HOURS AS INTERVAL HOUR)
* AS INTERVAL HOUR TO MINUTE))
* FROM WORKS GROUP BY PNUM;
CALL "SUB83" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB84" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE TABLE RUN_TIMES ("
DISPLAY " JOB_ID INT NOT NULL UNIQUE,"
DISPLAY " JOB_TYPE CHAR (3) NOT NULL,"
DISPLAY " RUN_SECONDS REAL);"
* EXEC SQL CREATE TABLE RUN_TIMES (
* JOB_ID INT NOT NULL UNIQUE,
* JOB_TYPE CHAR (3) NOT NULL,
* RUN_SECONDS REAL);
CALL "SUB85" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB86" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW TYPE_TIMES (JOB_TYPE, RUN_SECONDS) AS"
DISPLAY " SELECT JOB_TYPE,"
DISPLAY " AVG (RUN_SECONDS) * INTERVAL '01.000000' SECOND"
DISPLAY " FROM RUN_TIMES GROUP BY JOB_TYPE;"
* EXEC SQL CREATE VIEW TYPE_TIMES (JOB_TYPE, RUN_SECONDS) AS
* SELECT JOB_TYPE,
* AVG (RUN_SECONDS) * INTERVAL '01.000000' SECOND
* FROM RUN_TIMES GROUP BY JOB_TYPE;
CALL "SUB87" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB88" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW TYPE_TIMES2 (JOB_TYPE, RUN_SECONDS)
- " AS"
DISPLAY " SELECT JOB_TYPE,"
DISPLAY " CAST (CAST (AVG (RUN_SECONDS) AS NUMERIC (8,
- " 6))"
DISPLAY " AS INTERVAL SECOND)"
DISPLAY " FROM RUN_TIMES GROUP BY JOB_TYPE;"
* EXEC SQL CREATE VIEW TYPE_TIMES2 (JOB_TYPE, RUN_SECONDS) AS
* SELECT JOB_TYPE,
* CAST (CAST (AVG (RUN_SECONDS) AS NUMERIC (8, 6))
* AS INTERVAL SECOND)
* FROM RUN_TIMES GROUP BY JOB_TYPE;
CALL "SUB89" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB90" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW HUNDREDS (WORKTOTL) AS"
DISPLAY " SELECT SUM (CAST (HOURS AS INTERVAL DAY TO
- " MINUTE)) / 100"
DISPLAY " FROM PROJ_HOURS;"
* EXEC SQL CREATE VIEW HUNDREDS (WORKTOTL) AS
* SELECT SUM (CAST (HOURS AS INTERVAL DAY TO MINUTE)) / 100
* FROM PROJ_HOURS;
CALL "SUB91" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB92" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO WORKS"
DISPLAY " SELECT * FROM HU.WORKS;"
* EXEC SQL INSERT INTO WORKS
* SELECT * FROM HU.WORKS;
CALL "SUB93" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO WORKS VALUES"
DISPLAY " ('EX', 'P1', 50);"
* EXEC SQL INSERT INTO WORKS VALUES
* ('EX', 'P1', 50);
CALL "SUB94" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO WORKS VALUES"
DISPLAY " ('EX', 'P3', 25);"
* EXEC SQL INSERT INTO WORKS VALUES
* ('EX', 'P3', 25);
CALL "SUB95" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO RUN_TIMES VALUES"
DISPLAY " (0, 'DMP', 1.22);"
* EXEC SQL INSERT INTO RUN_TIMES VALUES
* (0, 'DMP', 1.22);
CALL "SUB96" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO RUN_TIMES VALUES"
DISPLAY " (1, 'DMP', .49);"
* EXEC SQL INSERT INTO RUN_TIMES VALUES
* (1, 'DMP', .49);
CALL "SUB97" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO RUN_TIMES VALUES"
DISPLAY " (2, 'CHK', 5.2);"
* EXEC SQL INSERT INTO RUN_TIMES VALUES
* (2, 'CHK', 5.2);
CALL "SUB98" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO RUN_TIMES VALUES"
DISPLAY " (3, 'CHK', 4.04);"
* EXEC SQL INSERT INTO RUN_TIMES VALUES
* (3, 'CHK', 4.04);
CALL "SUB99" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO RUN_TIMES VALUES"
DISPLAY " (4, 'CHK', 23.74);"
* EXEC SQL INSERT INTO RUN_TIMES VALUES
* (4, 'CHK', 23.74);
CALL "SUB100" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*The views PROJ_HOURS and PROJ_HOURS2 should be equivalent
*modulo any roundoff or truncation error.
*Allowing the sign to move inside of the quotes: TC #2 5.3
*( datetime - datetime ) <interval qualifier>: 6.15 FT.1
*Comparability of HOUR TO MINUTE vs. MINUTE: 4.5.2
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY " FROM PROJ_HOURS A, PROJ_HOURS2 B"
DISPLAY " WHERE A.PNUM = B.PNUM"
DISPLAY " AND (A.HOURS - B.HOURS) HOUR TO MINUTE"
DISPLAY " BETWEEN INTERVAL '-1' MINUTE AND INTERVAL '+1'
- " MINUTE;"
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM PROJ_HOURS A, PROJ_HOURS2 B
* WHERE A.PNUM = B.PNUM
* AND (A.HOURS - B.HOURS) HOUR TO MINUTE
* BETWEEN INTERVAL '-1' MINUTE AND INTERVAL '+1' MINUTE
* ;
CALL "SUB101" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 6; its value is ", int1
if (int1 NOT = 6) then
MOVE 0 TO flag
END-IF
*The views TYPE_TIMES and TYPE_TIMES2 should be equivalent
*modulo any roundoff or truncation error.
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1"
DISPLAY " FROM TYPE_TIMES A, TYPE_TIMES2 B"
DISPLAY " WHERE A.JOB_TYPE = B.JOB_TYPE"
DISPLAY " AND (A.RUN_SECONDS - B.RUN_SECONDS) SECOND"
DISPLAY " BETWEEN INTERVAL '-00.000010' SECOND"
DISPLAY " AND INTERVAL '+00.000010' SECOND;"
* EXEC SQL SELECT COUNT(*) INTO :int1
* FROM TYPE_TIMES A, TYPE_TIMES2 B
* WHERE A.JOB_TYPE = B.JOB_TYPE
* AND (A.RUN_SECONDS - B.RUN_SECONDS) SECOND
* BETWEEN INTERVAL '-00.000010' SECOND
* AND INTERVAL '+00.000010' SECOND;
CALL "SUB102" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 2; its value is ", int1
if (int1 NOT = 2) then
MOVE 0 TO flag
END-IF
*Check contents of PROJ_HOURS
DISPLAY "DECLARE C13531 CURSOR FOR"
DISPLAY " SELECT EXTRACT (HOUR FROM HOURS),"
DISPLAY " EXTRACT (MINUTE FROM HOURS)"
DISPLAY " FROM PROJ_HOURS ORDER BY PNUM;"
* EXEC SQL DECLARE C13531 CURSOR FOR
* SELECT EXTRACT (HOUR FROM HOURS),
* EXTRACT (MINUTE FROM HOURS)
* FROM PROJ_HOURS ORDER BY PNUM END-EXEC
DISPLAY "OPEN C13531;"
* EXEC SQL OPEN C13531;
CALL "SUB103" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13531 INTO :int1, :int2;"
* EXEC SQL FETCH C13531 INTO :int1, :int2;
CALL "SUB104" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 43; its value is ", int1
DISPLAY "int2 should be 20; its value is ", int2
if (int1 NOT = 43) then
MOVE 0 TO flag
END-IF
if (int2 < 19 OR int2 > 20) then
MOVE 0 TO flag
END-IF
if (flag = 1 AND int2 = 19) then
DISPLAY "truncation/roundoff error for int2 OK"
END-IF
DISPLAY " "
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13531 INTO :int1, :int2;"
* EXEC SQL FETCH C13531 INTO :int1, :int2;
CALL "SUB105" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 35; its value is ", int1
DISPLAY "int2 should be 0; its value is ", int2
if (int1 NOT = 35 OR int2 NOT = 0) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13531 INTO :int1, :int2;"
* EXEC SQL FETCH C13531 INTO :int1, :int2;
CALL "SUB106" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 52; its value is ", int1
DISPLAY "int2 should be 30; its value is ", int2
if (int1 NOT = 52 OR int2 NOT = 30) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13531 INTO :int1, :int2;"
* EXEC SQL FETCH C13531 INTO :int1, :int2;
CALL "SUB107" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 30; its value is ", int1
DISPLAY "int2 should be 0; its value is ", int2
if (int1 NOT = 30 OR int2 NOT = 0) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13531 INTO :int1, :int2;"
* EXEC SQL FETCH C13531 INTO :int1, :int2;
CALL "SUB108" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 46; its value is ", int1
DISPLAY "int2 should be 0; its value is ", int2
if (int1 NOT = 46 OR int2 NOT = 0) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "FETCH C13531 INTO :int1, :int2;"
* EXEC SQL FETCH C13531 INTO :int1, :int2;
CALL "SUB109" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 12; its value is ", int1
DISPLAY "int2 should be 0; its value is ", int2
if (int1 NOT = 12 OR int2 NOT = 0) then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH C13531 INTO :int1, :int2;"
* EXEC SQL FETCH C13531 INTO :int1, :int2;
CALL "SUB110" USING SQLCODE SQLSTATE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 100 OR NORMSQ NOT = "02000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "02000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
DISPLAY " "
DISPLAY "CLOSE C13531;"
* EXEC SQL CLOSE C13531;
CALL "SUB111" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE C13532 CURSOR FOR"
DISPLAY " SELECT EXTRACT (SECOND FROM RUN_SECONDS)"
DISPLAY " FROM TYPE_TIMES ORDER BY JOB_TYPE;"
* EXEC SQL DECLARE C13532 CURSOR FOR
* SELECT EXTRACT (SECOND FROM RUN_SECONDS)
* FROM TYPE_TIMES ORDER BY JOB_TYPE END-EXEC
DISPLAY "OPEN C13532;"
* EXEC SQL OPEN C13532;
CALL "SUB112" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE flt1 = -1.0
DISPLAY "FETCH C13532 INTO :flt1;"
* EXEC SQL FETCH C13532 INTO :flt1;
CALL "SUB113" USING SQLCODE SQLSTATE flt1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "flt1 should be 10.993333 +- 0.00001; its value is
- " ", flt1
if (flt1 < 10.993323 OR flt1 > 10.993343) then
MOVE 0 TO flag
END-IF
COMPUTE flt1 = -1.0
DISPLAY "FETCH C13532 INTO :flt1;"
* EXEC SQL FETCH C13532 INTO :flt1;
CALL "SUB114" USING SQLCODE SQLSTATE flt1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "flt1 should be 0.855 +- 0.00001; its value is ",
flt1
if (flt1 < 0.85499 OR flt1 > 0.85501) then
MOVE 0 TO flag
END-IF
DISPLAY "FETCH C13532 INTO :flt1;"
* EXEC SQL FETCH C13532 INTO :flt1;
CALL "SUB115" USING SQLCODE SQLSTATE flt1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE should be 100; its value is ", SQL-COD
DISPLAY "SQLSTATE should be 02000; its value is ", SQLSTATE
PERFORM NOSUBCLASS THRU EXIT-NOSUBCLASS
if (SQLCODE NOT = 100 OR NORMSQ NOT = "02000") then
MOVE 0 TO flag
END-IF
if (NORMSQ = "02000" AND NORMSQ NOT = SQLSTATE)
then
DISPLAY "Valid implementation-defined SQLSTATE accepted."
END-IF
DISPLAY " "
DISPLAY "CLOSE C13532;"
* EXEC SQL CLOSE C13532;
CALL "SUB116" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Test interval divide
COMPUTE int1 = -1
DISPLAY "SELECT EXTRACT (DAY FROM WORKTOTL)"
DISPLAY " INTO :int1 FROM HUNDREDS;"
* EXEC SQL SELECT EXTRACT (DAY FROM WORKTOTL)
* INTO :int1 FROM HUNDREDS;
CALL "SUB117" USING SQLCODE SQLSTATE int1
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
COMPUTE int1 = -1
DISPLAY "SELECT EXTRACT (HOUR FROM WORKTOTL)"
DISPLAY " INTO :int1 FROM HUNDREDS;"
* EXEC SQL SELECT EXTRACT (HOUR FROM WORKTOTL)
* INTO :int1 FROM HUNDREDS;
CALL "SUB118" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 2; its value is ", int1
if (int1 NOT = 2) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
DISPLAY "SELECT EXTRACT (MINUTE FROM WORKTOTL)"
DISPLAY " INTO :int1 FROM HUNDREDS;"
* EXEC SQL SELECT EXTRACT (MINUTE FROM WORKTOTL)
* INTO :int1 FROM HUNDREDS;
CALL "SUB119" USING SQLCODE SQLSTATE int1
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 11; its value is ", int1
if (int1 NOT = 11) then
MOVE 0 TO flag
END-IF
*Exact value would have been 2 hours, 11 minutes,
*18 seconds. It should get rounded downwards even
*if there is rounding/truncation error in previous
*calculations.
DISPLAY "ROLLBACK WORK;"
* EXEC SQL ROLLBACK WORK;
CALL "SUB120" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE WORKS CASCADE;"
* EXEC SQL DROP TABLE WORKS CASCADE;
CALL "SUB121" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB122" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE RUN_TIMES CASCADE;"
* EXEC SQL DROP TABLE RUN_TIMES CASCADE;
CALL "SUB123" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
* EXEC SQL COMMIT WORK;
CALL "SUB124" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0694','pass','MCO');
CALL "SUB125" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml135.sco *** fail *** "
* EXEC SQL INSERT INTO HU.TESTREPORT
* VALUES('0694','fail','MCO');
CALL "SUB126" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB127" USING SQLCODE SQLSTATE
MOVE SQLCODE TO SQL-COD
******************** END TEST0694 ********************
******************** BEGIN TEST0695 *******************
MOVE 1 TO flag
DISPLAY " TEST0695 "
DISPLAY " in "
DISPLAY "References:"
DISPLAY " F# 11 -- Transaction isolation"
--> --------------------
--> maximum size reached
--> --------------------
¤ Dauer der Verarbeitung: 0.123 Sekunden
(vorverarbeitet)
¤
|
Haftungshinweis
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.
|