IDENTIFICATION DIVISION.
PROGRAM-ID. DML124.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. xyz.
OBJECT-COMPUTER. xyz.
DATA DIVISION.
WORKING-STORAGE SECTION.
* EMBEDDED COBOL (file "DML124.PCO")
****************************************************************
*
* COMMENT SECTION
*
* DATE 1994/6/20 EMBEDDED 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.
*
* DML124.PCO
* WRITTEN BY: David W. Flater
* TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE
* Bug fixes & stronger pass criteria by Joan Sullivan 2/27/95
* Corrected in accordance with X3H2-95-105 5/9/95
*
* This routine tests SQL descriptors, which is a feature of
* Dynamic SQL.
*
* 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 int3 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int4 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int5 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int6 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 int7 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flt1 PIC S9(4)V9(4) DISPLAY SIGN LEADING SEPARATE.
* OK to change the precision of smint1 to match SMALLINT
01 smint1 PIC S9(2) BINARY.
* OK to change the precision of bin2 to match SMALLINT
01 bin2 PIC S9(2) BINARY.
* OK to change the precision of bin9 to match INTEGER
01 bin9 PIC S9(9) BINARY.
01 dstmt PIC X(50).
01 longst PIC X(240).
01 cname PIC X(20).
01 indic1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
01 c2 PIC X(2).
01 c4 PIC X(4).
01 c6 PIC X(6).
01 c7 PIC X(7).
EXEC SQL END DECLARE SECTION END-EXEC
01 FLT-1 PIC -(5).9999.
01 BIN-1 PIC -(5).
01 intprc PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 relprc PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
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 "HU " TO uid
CALL "AUTHID" USING uid
MOVE "not logged in, not" TO uidx
EXEC SQL SELECT USER INTO :uidx FROM HU.ECCO END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL ROLLBACK WORK END-EXEC
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, Embedded COBOL, dml124.pco"
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
*This test was converted from a FLATER test to a HU test. We
*need CONCATBUF.
DISPLAY "CREATE TABLE CONCATBUF (ZZ CHAR(240));"
EXEC SQL CREATE TABLE CONCATBUF (ZZ CHAR(240)) END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "COMMIT WORK;"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** BEGIN TEST0653 *******************
MOVE 1 TO flag
DISPLAY " TEST0653 "
DISPLAY " Descriptors: DESCRIBE OUTPUT"
DISPLAY "References:"
DISPLAY " F# 1 -- Dynamic SQL"
DISPLAY " 17.8 -- "
DISPLAY " 17.1 -- Description of SQL item descriptor
- " areas"
DISPLAY " 17.2 GR.3 -- limit on descriptor areas is"
DISPLAY " implementation-defined"
DISPLAY " 7.9 SR.10 -- nullability"
DISPLAY " 6.1 -- "
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
DISPLAY "CREATE TABLE CACHESTAT ("
DISPLAY " HIT_RATIO FLOAT (17) NOT NULL,"
DISPLAY " FRAGMENTATION_PCT FLOAT);"
EXEC SQL CREATE TABLE CACHESTAT (
HIT_RATIO FLOAT (17) NOT NULL,
FRAGMENTATION_PCT FLOAT) END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CREATE VIEW COMBINATIONS (INTTEST,"
DISPLAY " REALTEST, SMALLTEST, DOUBLETEST, NUMTEST,"
DISPLAY " DECTEST) AS SELECT * FROM HU.EE, HU.GG, HU.HH,"
DISPLAY " HU.II, HU.LL, HU.PP;"
EXEC SQL CREATE VIEW COMBINATIONS (INTTEST,
REALTEST, SMALLTEST, DOUBLETEST, NUMTEST,
DECTEST) AS SELECT * FROM HU.EE, HU.GG, HU.HH,
HU.II, HU.LL, HU.PP END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "ALLOCATE DESCRIPTOR 'D12411' WITH MAX 8;"
EXEC SQL ALLOCATE DESCRIPTOR 'D12411' WITH MAX 8 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
if (SQLSTATE = "07009") then
DISPLAY "Received SQLSTATE 07009!"
DISPLAY "This test must be rewritten by NIST (in the
- " event of"
DISPLAY "a validation) to accomodate
- " implementation-defined"
DISPLAY "limit on ."
END-IF
DISPLAY " "
DISPLAY "dstmt=""SELECT * FROM HU.STAFF"""
MOVE "SELECT * FROM HU.STAFF
- " " TO dstmt
DISPLAY "PREPARE S12411 FROM :dstmt;"
EXEC SQL PREPARE S12411 FROM :dstmt END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE OUTPUT S12411 USING SQL DESCRIPTOR
- " 'D12411';"
EXEC SQL DESCRIBE OUTPUT S12411 USING SQL DESCRIPTOR
'D12411' END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "GET DESCRIPTOR 'D12411' :int1 = COUNT;"
EXEC SQL GET DESCRIPTOR 'D12411' :int1 = COUNT END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4; its value is ", int1
if (int1 NOT = 4) then
MOVE 0 TO flag
END-IF
*CHARACTER_SET_* and COLLATION_* are orphaned features
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 1"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = LENGTH, :int5 =
- " OCTET_LENGTH;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 1
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = LENGTH, :int5 = OCTET_LENGTH
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1 (CHARACTER); its value is ", int1
DISPLAY "int2 should be 0 (NOT NULL); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'EMPNUM '; its value
- " is '", cname "'"
DISPLAY "int4 should be 3; its value is ", int4
DISPLAY "int5 should be > 2; its value is ", int5
if (int1 NOT = 1 OR int2 NOT = 0 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 NOT = 3 OR int5 NOT > 2) then
MOVE 0 TO flag
END-IF
if (cname NOT = "EMPNUM ") then
MOVE 0 TO flag
END-IF
COMPUTE bin9 = -1
COMPUTE int2 = -1
COMPUTE bin2 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 2"
DISPLAY " :bin9 = TYPE, :int2 = NULLABLE, :bin2 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = LENGTH, :int5 =
- " OCTET_LENGTH;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 2
:bin9 = TYPE, :int2 = NULLABLE, :bin2 = UNNAMED,
:cname = NAME, :int4 = LENGTH, :int5 = OCTET_LENGTH
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
MOVE bin9 TO BIN-1
DISPLAY "bin9 should be 1 (CHARACTER); its value is " BIN-1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
MOVE bin2 TO BIN-1
DISPLAY "bin2 should be 0 (named); its value is ", BIN-1
DISPLAY "cname should be 'EMPNAME '; its value
- " is '", cname "'"
DISPLAY "int4 should be 20; its value is ", int4
DISPLAY "int5 should be > 14; its value is ", int5
if (bin9 NOT = 1 OR int2 NOT = 1 OR bin2 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 NOT = 20 OR int5 NOT > 14) then
MOVE 0 TO flag
END-IF
if (cname NOT = "EMPNAME ") then
MOVE 0 TO flag
END-IF
COMPUTE bin2 = -1
COMPUTE int2 = -1
COMPUTE bin9 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 3"
DISPLAY " :bin2 = TYPE, :int2 = NULLABLE, :bin9 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION, :int5 =
- " SCALE;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 3
:bin2 = TYPE, :int2 = NULLABLE, :bin9 = UNNAMED,
:cname = NAME, :int4 = PRECISION, :int5 = SCALE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
MOVE bin2 TO BIN-1
DISPLAY "bin2 should be 3 (DECIMAL); its value is ", BIN-1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
MOVE bin9 TO BIN-1
DISPLAY "bin9 should be 0 (named); its value is ", BIN-1
DISPLAY "cname should be 'GRADE '; its value
- " is '", cname "'"
DISPLAY "int4 should be >= 4; its value is ", int4
DISPLAY "int5 should be 0; its value is ", int5
if (bin2 NOT = 3 OR int2 NOT = 1 OR bin9 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 < 4 OR int5 NOT = 0) then
MOVE 0 TO flag
END-IF
if (cname NOT = "GRADE ") then
MOVE 0 TO flag
END-IF
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 4"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :bin2 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :bin9 = LENGTH, :int5 =
- " OCTET_LENGTH;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 4
:int1 = TYPE, :int2 = NULLABLE, :bin2 = UNNAMED,
:cname = NAME, :bin9 = LENGTH, :int5 = OCTET_LENGTH
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1 (CHARACTER); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
MOVE bin2 TO BIN-1
DISPLAY "bin2 should be 0 (named); its value is ", BIN-1
DISPLAY "cname should be 'CITY '; its value
- " is '", cname "'"
MOVE bin9 TO BIN-1
DISPLAY "bin9 should be 15; its value is ", BIN-1
DISPLAY "int5 should be > 11; its value is ", int5
if (int1 NOT = 1 OR int2 NOT = 1 OR bin2 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (bin9 NOT = 15 OR int5 NOT > 11) then
MOVE 0 TO flag
END-IF
if (cname NOT = "CITY ") then
MOVE 0 TO flag
END-IF
EXEC SQL DELETE FROM CONCATBUF END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO CONCATBUF VALUES (
'SELECT * FROM CACHESTAT, COMBINATIONS' ||
' WHERE HIT_RATIO < .97'
) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "longst=""", longst """"
DISPLAY "PREPARE S12412 FROM :longst;"
EXEC SQL PREPARE S12412 FROM :longst END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE S12412 USING SQL DESCRIPTOR 'D12411';"
EXEC SQL DESCRIBE S12412 USING SQL DESCRIPTOR 'D12411'
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "GET DESCRIPTOR 'D12411' :int1 = COUNT;"
EXEC SQL GET DESCRIPTOR 'D12411' :int1 = COUNT END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 8; its value is ", int1
if (int1 NOT = 8) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 1"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 1
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 6 (FLOAT); its value is ", int1
DISPLAY "int2 should be 0 (NOT NULL); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'HIT_RATIO '; its value
- " is '", cname "'"
DISPLAY "int4 should be > 0; its value is ", int4
if (int1 NOT = 6 OR int2 NOT = 0 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 NOT > 0) then
MOVE 0 TO flag
END-IF
if (cname NOT = "HIT_RATIO ") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 2"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 2
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 6 (FLOAT); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'FRAGMENTATION_PCT '; its value
- " is '", cname "'"
DISPLAY "int4 should be > 0; its value is ", int4
if (int1 NOT = 6 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 < 1) then
MOVE 0 TO flag
END-IF
if (cname NOT = "FRAGMENTATION_PCT ") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 3"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION, :int5 =
- " SCALE;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 3
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION, :int5 = SCALE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4 (INTEGER); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'INTTEST '; its value
- " is '", cname "'"
DISPLAY "int4 should be > 0; its value is ", int4
DISPLAY "int5 should be 0; its value is ", int5
if (int1 NOT = 4 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 < 1 OR int5 NOT = 0) then
MOVE 0 TO flag
END-IF
if (cname NOT = "INTTEST ") then
MOVE 0 TO flag
END-IF
MOVE int4 TO intprc
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 4"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 4
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 7 (REAL); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'REALTEST '; its value
- " is '", cname "'"
DISPLAY "int4 should be > 0; its value is ", int4
if (int1 NOT = 7 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 < 1) then
MOVE 0 TO flag
END-IF
if (cname NOT = "REALTEST ") then
MOVE 0 TO flag
END-IF
MOVE int4 TO relprc
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE 5 TO int6
DISPLAY "int6 = 5"
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE :int6"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION, :int5 =
- " SCALE;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE :int6
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION, :int5 = SCALE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 5 (SMALLINT); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'SMALLTEST '; its value
- " is '", cname "'"
DISPLAY "int4 should be 0 < int4 <= ", intprc "; its value
- " is ", int4
DISPLAY "int5 should be 0; its value is ", int5
if (int1 NOT = 4 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 < 1 OR int4 > intprc OR int5 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (cname NOT = "SMALLTEST ") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 6"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 6
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 8 (DOUBLE); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'DOUBLETEST '; its value
- " is '", cname "'"
DISPLAY "int4 should be > ", relprc "; its value is ", int4
if (int1 NOT = 8 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 < 1 OR int4 NOT > relprc) then
MOVE 0 TO flag
END-IF
if (cname NOT = "DOUBLETEST ") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 7"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION, :int5 =
- " SCALE;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 7
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION, :int5 = SCALE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 2 (NUMERIC); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'NUMTEST '; its value
- " is '", cname "'"
DISPLAY "int4 should be 13; its value is ", int4
DISPLAY "int5 should be 6; its value is ", int5
if (int1 NOT = 2 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 NOT = 13 OR int5 NOT = 6) then
MOVE 0 TO flag
END-IF
if (cname NOT = "NUMTEST ") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 8"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION, :int5 =
- " SCALE;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 8
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION, :int5 = SCALE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 3 (DECIMAL); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'DECTEST '; its value
- " is '", cname "'"
DISPLAY "int4 should be >= 13; its value is ", int4
DISPLAY "int5 should be 6; its value is ", int5
if (int1 NOT = 3 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int4 < 13 OR int5 NOT = 6) then
MOVE 0 TO flag
END-IF
if (cname NOT = "DECTEST ") then
MOVE 0 TO flag
END-IF
*Unnamed columns
DISPLAY "dstmt=""SELECT USER, COUNT(*) FROM HU.ECCO"""
MOVE "SELECT USER, COUNT(*) FROM HU.ECCO
- " " TO dstmt
DISPLAY "PREPARE S12413 FROM :dstmt;"
EXEC SQL PREPARE S12413 FROM :dstmt END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE S12413 USING SQL DESCRIPTOR 'D12411';"
EXEC SQL DESCRIBE S12413 USING SQL DESCRIPTOR 'D12411'
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "GET DESCRIPTOR 'D12411' :int1 = COUNT;"
EXEC SQL GET DESCRIPTOR 'D12411' :int1 = COUNT END-EXEC
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
*Nullability of columns: 7.9 GR.10
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 1"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = LENGTH, :int5 =
- " OCTET_LENGTH;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 1
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = LENGTH, :int5 = OCTET_LENGTH
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1 (CHARACTER); its value is ", int1
DISPLAY "int2 should be 0 (NOT NULL); its value is ", int2
DISPLAY "int3 should be 1 (unnamed); its value is ", int3
DISPLAY "cname is '", cname "'"
DISPLAY "int4 should be > 7; its value is ", int4
DISPLAY "int5 should be > 4; its value is ", int5
if (int1 NOT = 1 OR int2 NOT = 0 OR int3 NOT = 1)
then
MOVE 0 TO flag
END-IF
if (int4 NOT > 7 OR int5 NOT > 4) then
DISPLAY "The correct values for int4 and int5 are
- " implementation-"
DISPLAY "defined, but must be justified since they are
- " unexpectedly low."
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int4 = -1
COMPUTE int5 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 2"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int4 = PRECISION, :int5 =
- " SCALE;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 2
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int4 = PRECISION, :int5 = SCALE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 2 <= int1 <= 5; its value is ",
int1
DISPLAY "int2 should be 0 (NOT NULL); its value is ", int2
DISPLAY "int3 should be 1 (unnamed); its value is ", int3
DISPLAY "cname is '", cname "'"
DISPLAY "int4 should be > 0; its value is ", int4
DISPLAY "int5 should be 0; its value is ", int5
if (int1 < 2 OR int1 > 5 OR int2 NOT = 0) then
MOVE 0 TO flag
END-IF
if (int3 NOT = 1 OR int4 < 1 OR int5 NOT = 0)
then
MOVE 0 TO flag
END-IF
*X3H2-95-103: Question marks are possibly nullable
*17.9 GR.3.e.iii Unnamed columns
EXEC SQL DELETE FROM CONCATBUF END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO CONCATBUF VALUES (
'SELECT HIT_RATIO AS HR, FRAGMENTATION_PCT * ?' ||
' FROM CACHESTAT'
) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "longst=""", longst """"
DISPLAY "PREPARE S12414 FROM :longst;"
EXEC SQL PREPARE S12414 FROM :longst END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE S12414 USING SQL DESCRIPTOR 'D12411';"
EXEC SQL DESCRIBE S12414 USING SQL DESCRIPTOR 'D12411'
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
COMPUTE int2 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 1"
DISPLAY " :int1 = NULLABLE, :int2 = UNNAMED, :cname =
- " NAME;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 1
:int1 = NULLABLE, :int2 = UNNAMED, :cname = NAME END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "int1 should be 0 (NOT NULL); its value is ", int1
DISPLAY "int2 should be 0 (named); its value is ", int2
DISPLAY "cname should be 'HR '; its value
- " is '", cname "'"
if (int1 NOT = 0 OR int2 NOT = 0) then
MOVE 0 TO flag
END-IF
if (cname NOT = "HR ") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
DISPLAY "GET DESCRIPTOR 'D12411' VALUE 2"
DISPLAY " :int1 = NULLABLE, :int2 = UNNAMED;"
EXEC SQL GET DESCRIPTOR 'D12411' VALUE 2
:int1 = NULLABLE, :int2 = UNNAMED END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "int1 should be 1 (NULLABLE); its value is ", int1
DISPLAY "int2 should be 1 (unnamed); its value is ", int2
if (int1 NOT = 1 OR int2 NOT = 1) then
MOVE 0 TO flag
END-IF
DISPLAY "DEALLOCATE DESCRIPTOR 'D12411';"
EXEC SQL DEALLOCATE DESCRIPTOR 'D12411' END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
.
P199.
DISPLAY "ROLLBACK WORK;"
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP TABLE CACHESTAT CASCADE;"
EXEC SQL DROP TABLE CACHESTAT CASCADE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DROP VIEW COMBINATIONS CASCADE;"
EXEC SQL DROP VIEW COMBINATIONS CASCADE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
if ( flag = 1 ) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO HU.TESTREPORT
VALUES('0653','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml124.pco *** fail *** "
EXEC SQL INSERT INTO HU.TESTREPORT
VALUES('0653','fail','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0653 ********************
******************** BEGIN TEST0654 *******************
MOVE 1 TO flag
DISPLAY " TEST0654 "
DISPLAY " Descriptors: INTO SQL DESCRIPTOR"
DISPLAY "References:"
DISPLAY " F# 1 -- Dynamic SQL"
DISPLAY " 17.9 -- "
DISPLAY " 17.8 -- "
DISPLAY " 17.1 -- Description of SQL item descriptor
- " areas"
DISPLAY " 17.2 GR.3 -- limit on descriptor areas is"
DISPLAY " implementation-defined"
DISPLAY " 6.1 -- "
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
DISPLAY "CREATE TABLE BANKTAB ("
DISPLAY " NAAM CHAR (10), BALANCE NUMERIC (7, 2),"
DISPLAY " INTEREST DECIMAL (3, 2), TRANSACTIONS INT,"
DISPLAY " PAYMENTS SMALLINT, INTEREST_RATE FLOAT,"
DISPLAY " ANNUAL_YIELD REAL, FRACTIONAL_CENTS DOUBLE
- " PRECISION);"
EXEC SQL CREATE TABLE BANKTAB (
NAAM CHAR (10), BALANCE NUMERIC (7, 2),
INTEREST DECIMAL (3, 2), TRANSACTIONS INT,
PAYMENTS SMALLINT, INTEREST_RATE FLOAT,
ANNUAL_YIELD REAL, FRACTIONAL_CENTS DOUBLE PRECISION)
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "INSERT INTO BANKTAB VALUES ("
DISPLAY " 'Bubba', 524.07, 2.42, 13, 1, 3.0, 3.1, -.256);"
EXEC SQL INSERT INTO BANKTAB VALUES (
'Bubba', 524.07, 2.42, 13, 1, 3.0, 3.1, -.256) END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Allocate one extra occurrence
DISPLAY "ALLOCATE DESCRIPTOR 'D12421' WITH MAX 9;"
EXEC SQL ALLOCATE DESCRIPTOR 'D12421' WITH MAX 9 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
if (SQLSTATE = "07009") then
DISPLAY "Received SQLSTATE 07009!"
DISPLAY "This test must be rewritten by NIST (in the
- " event of"
DISPLAY "a validation) to accomodate
- " implementation-defined"
DISPLAY "limit on ."
END-IF
DISPLAY " "
DISPLAY "dstmt=""SELECT * FROM BANKTAB"""
MOVE "SELECT * FROM BANKTAB
- " " TO dstmt
DISPLAY "PREPARE S12421 FROM :dstmt;"
EXEC SQL PREPARE S12421 FROM :dstmt END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DESCRIBE OUTPUT S12421 USING SQL DESCRIPTOR
- " 'D12421';"
EXEC SQL DESCRIBE OUTPUT S12421 USING SQL DESCRIPTOR
'D12421' END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Doctor results of describe to "match" host language variables
*Implementation-dependent precisions, etc.
DISPLAY "SET DESCRIPTOR 'D12421' VALUE 1"
DISPLAY " LENGTH = 20;"
EXEC SQL SET DESCRIPTOR 'D12421' VALUE 1
LENGTH = 20 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
* TYPE is already 2
DISPLAY "SET DESCRIPTOR 'D12421' VALUE 2"
DISPLAY " PRECISION = 8, SCALE = 4;"
EXEC SQL SET DESCRIPTOR 'D12421' VALUE 2
PRECISION = 8, SCALE = 4 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "SET DESCRIPTOR 'D12421' VALUE 3"
DISPLAY " TYPE = 2, PRECISION = 8, SCALE = 4;"
EXEC SQL SET DESCRIPTOR 'D12421' VALUE 3
TYPE = 2, PRECISION = 8, SCALE = 4 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "SET DESCRIPTOR 'D12421' VALUE 6"
DISPLAY " TYPE = 2, PRECISION = 8, SCALE = 4;"
EXEC SQL SET DESCRIPTOR 'D12421' VALUE 6
TYPE = 2, PRECISION = 8, SCALE = 4 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "SET DESCRIPTOR 'D12421' VALUE 7"
DISPLAY " TYPE = 2, PRECISION = 8, SCALE = 4;"
EXEC SQL SET DESCRIPTOR 'D12421' VALUE 7
TYPE = 2, PRECISION = 8, SCALE = 4 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "SET DESCRIPTOR 'D12421' VALUE 8"
DISPLAY " TYPE = 2, PRECISION = 8, SCALE = 4;"
EXEC SQL SET DESCRIPTOR 'D12421' VALUE 8
TYPE = 2, PRECISION = 8, SCALE = 4 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "DECLARE C12421 CURSOR FOR S12421;"
EXEC SQL DECLARE C12421 CURSOR FOR S12421 END-EXEC
DISPLAY " "
DISPLAY "OPEN C12421;"
EXEC SQL OPEN C12421 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "FETCH C12421 INTO SQL DESCRIPTOR 'D12421';"
EXEC SQL FETCH C12421 INTO SQL DESCRIPTOR 'D12421' END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
DISPLAY "GET DESCRIPTOR 'D12421' :int1 = COUNT;"
EXEC SQL GET DESCRIPTOR 'D12421' :int1 = COUNT END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 8; its value is ", int1
if (int1 NOT = 8) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 1"
DISPLAY " :int1 = INDICATOR, :cname = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 1
:int1 = INDICATOR, :cname = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
DISPLAY "cname should be 'Bubba '; its value
- " is '", cname "'"
if (int1 NOT = 0 OR cname NOT = "Bubba
- " ") then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE flt1 = -1.0
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 2"
DISPLAY " :int1 = INDICATOR, :flt1 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 2
:int1 = INDICATOR, :flt1 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
MOVE flt1 TO FLT-1
DISPLAY "flt1 should be 524.07 +-.005; its value is ",
FLT-1
if (int1 NOT = 0 OR flt1 < 524.065 OR flt1 >
524.075) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE flt1 = -1.0
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 3"
DISPLAY " :int1 = INDICATOR, :flt1 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 3
:int1 = INDICATOR, :flt1 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
MOVE flt1 TO FLT-1
DISPLAY "flt1 should be 2.42 +-.005; its value is ", FLT-1
if (int1 NOT = 0 OR flt1 < 2.415 OR flt1 > 2.425)
then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 4"
DISPLAY " :int1 = INDICATOR, :bin9 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 4
:int1 = INDICATOR, :bin9 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
MOVE bin9 TO BIN-1
DISPLAY "bin9 should be 13; its value is ", BIN-1
if (int1 NOT = 0 OR bin9 NOT = 13) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE int2 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 5"
DISPLAY " :int1 = INDICATOR, :bin2 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 5
:int1 = INDICATOR, :bin2 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
MOVE bin2 TO BIN-1
DISPLAY "bin2 should be 1; its value is ", BIN-1
if (int1 NOT = 0 OR bin2 NOT = 1) then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE flt1 = -1.0
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 6"
DISPLAY " :int1 = INDICATOR, :flt1 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 6
:int1 = INDICATOR, :flt1 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
MOVE flt1 TO FLT-1
DISPLAY "flt1 should be 3.0 +-.05; its value is ", FLT-1
if (int1 NOT = 0 OR flt1 < 2.95 OR flt1 > 3.05)
then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE flt1 = -1.0
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 7"
DISPLAY " :int1 = INDICATOR, :flt1 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 7
:int1 = INDICATOR, :flt1 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
MOVE flt1 TO FLT-1
DISPLAY "flt1 should be 3.1 +-.05; its value is ", FLT-1
if (int1 NOT = 0 OR flt1 < 3.05 OR flt1 > 3.15)
then
MOVE 0 TO flag
END-IF
COMPUTE int1 = -1
COMPUTE flt1 = -1.0
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 8"
DISPLAY " :int1 = INDICATOR, :flt1 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 8
:int1 = INDICATOR, :flt1 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 0; its value is ", int1
MOVE flt1 TO FLT-1
DISPLAY "flt1 should be -.256 +-.0005; its value is ",
FLT-1
if (int1 NOT = 0 OR flt1 < -.2565 OR flt1 >
-.2555) then
MOVE 0 TO flag
END-IF
*17.4 GR 4, no data (SQLSTATE 02000) if <item number> > COUNT
COMPUTE int1 = -1
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 9"
DISPLAY " :int1 = INDICATOR;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 9
:int1 = INDICATOR END-EXEC
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 " "
*Implicit casting: 17.9 GR.7
*Substitute integer for real
DISPLAY "SET DESCRIPTOR 'D12421' VALUE 2"
DISPLAY " TYPE = 4;"
EXEC SQL SET DESCRIPTOR 'D12421' VALUE 2
TYPE = 4 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "CLOSE C12421;"
EXEC SQL CLOSE C12421 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "OPEN C12421;"
EXEC SQL OPEN C12421 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "FETCH C12421 INTO SQL DESCRIPTOR 'D12421';"
EXEC SQL FETCH C12421 INTO SQL DESCRIPTOR 'D12421' END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Make sure it didn't munge the settings
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE bin9 = -1
COMPUTE int6 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 2"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int6 = INDICATOR, :bin9 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 2
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int6 = INDICATOR, :bin9 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4 (INTEGER); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'BALANCE '; its value
- " is '", cname "'"
MOVE bin9 TO BIN-1
DISPLAY "bin9 should be 524; its value is ", BIN-1
DISPLAY "int6 should be 0; its value is ", int6
if (int1 NOT = 4 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (bin9 NOT = 524 OR int6 NOT = 0) then
MOVE 0 TO flag
END-IF
if (cname NOT = "BALANCE ") then
MOVE 0 TO flag
END-IF
*Test null
DISPLAY "CLOSE C12421;"
EXEC SQL CLOSE C12421 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "UPDATE BANKTAB SET BALANCE = NULL;"
EXEC SQL UPDATE BANKTAB SET BALANCE = NULL END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "OPEN C12421;"
EXEC SQL OPEN C12421 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "FETCH C12421 INTO SQL DESCRIPTOR 'D12421';"
EXEC SQL FETCH C12421 INTO SQL DESCRIPTOR 'D12421' END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
COMPUTE int1 = -1
COMPUTE int2 = -1
COMPUTE int3 = -1
COMPUTE int6 = -1
COMPUTE bin9 = -1
MOVE "xxxxxxxxxxxxxxxxxxxx" TO cname
DISPLAY "GET DESCRIPTOR 'D12421' VALUE 2"
DISPLAY " :int1 = TYPE, :int2 = NULLABLE, :int3 =
- " UNNAMED,"
DISPLAY " :cname = NAME, :int6 = INDICATOR, :bin9 = DATA;"
EXEC SQL GET DESCRIPTOR 'D12421' VALUE 2
:int1 = TYPE, :int2 = NULLABLE, :int3 = UNNAMED,
:cname = NAME, :int6 = INDICATOR, :bin9 = DATA END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 4 (INTEGER); its value is ", int1
DISPLAY "int2 should be 1 (NULLABLE); its value is ", int2
DISPLAY "int3 should be 0 (named); its value is ", int3
DISPLAY "cname should be 'BALANCE '; its value
- " is '", cname "'"
DISPLAY "int6 should be -1; its value is ", int6
if (int1 NOT = 4 OR int2 NOT = 1 OR int3 NOT = 0)
then
MOVE 0 TO flag
END-IF
if (int6 NOT = -1) then
MOVE 0 TO flag
END-IF
if (cname NOT = "BALANCE ") then
MOVE 0 TO flag
END-IF
.
P198.
DISPLAY "ROLLBACK WORK;"
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*TEd Hook #1
DISPLAY "DROP TABLE BANKTAB CASCADE;"
EXEC SQL DROP TABLE BANKTAB CASCADE END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*TEd Hook #2
if ( flag = 1 ) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO HU.TESTREPORT
VALUES('0654','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml124.pco *** fail *** "
EXEC SQL INSERT INTO HU.TESTREPORT
VALUES('0654','fail','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
COMPUTE errcnt = errcnt + 1
END-IF
DISPLAY "==============================================="
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0654 ********************
******************** BEGIN TEST0655 *******************
MOVE 1 TO flag
DISPLAY " TEST0655 "
DISPLAY " Descriptors: USING SQL DESCRIPTOR"
DISPLAY "References:"
DISPLAY " F# 1 -- Dynamic SQL"
DISPLAY " 17.9 -- "
DISPLAY " 17.10 -- "
DISPLAY " 17.14 -- "
DISPLAY " 17.1 -- Description of SQL item descriptor
- " areas"
DISPLAY " 17.2 GR.3 -- limit on descriptor areas is"
DISPLAY " implementation-defined"
DISPLAY " 6.1 -- "
DISPLAY " - - - - - - - - - - - - - - - - - - -"
COMPUTE SQLCODE = -1
MOVE "xxxxx" TO SQLSTATE
*TEd Hook #1
DISPLAY "CREATE TABLE BANKTAB ("
DISPLAY " NAAM CHAR (10), BALANCE NUMERIC (7, 2),"
DISPLAY " INTEREST DECIMAL (3, 2), TRANSACTIONS INT,"
DISPLAY " PAYMENTS SMALLINT, INTEREST_RATE FLOAT,"
DISPLAY " ANNUAL_YIELD REAL, FRACTIONAL_CENTS DOUBLE
- " PRECISION);"
EXEC SQL CREATE TABLE BANKTAB (
NAAM CHAR (10), BALANCE NUMERIC (7, 2),
INTEREST DECIMAL (3, 2), TRANSACTIONS INT,
PAYMENTS SMALLINT, INTEREST_RATE FLOAT,
ANNUAL_YIELD REAL, FRACTIONAL_CENTS DOUBLE PRECISION)
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "COMMIT WORK;"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*TEd Hook #2
DISPLAY "ALLOCATE DESCRIPTOR 'D12431' WITH MAX 8;"
EXEC SQL ALLOCATE DESCRIPTOR 'D12431' WITH MAX 8 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
if (SQLSTATE = "07009") then
DISPLAY "Received SQLSTATE 07009!"
DISPLAY "This test must be rewritten by NIST (in the
- " event of"
DISPLAY "a validation) to accomodate
- " implementation-defined"
DISPLAY "limit on ."
END-IF
DISPLAY " "
*Now we're going to do implicit casting in the other direction
DISPLAY "SET DESCRIPTOR 'D12431' COUNT = 8;"
EXEC SQL SET DESCRIPTOR 'D12431' COUNT = 8 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Name is NULL
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 1"
DISPLAY " TYPE = 2, PRECISION = 3, SCALE = 0, INDICATOR =
- " -1;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 1
TYPE = 2, PRECISION = 3, SCALE = 0, INDICATOR = -1
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE 3785.2 TO flt1
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 2"
DISPLAY " DATA = :flt1, TYPE = 2,"
DISPLAY " PRECISION = 8, SCALE = 4,"
DISPLAY " INDICATOR = 0;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 2
DATA = :flt1, TYPE = 2,
PRECISION = 8, SCALE = 4,
INDICATOR = 0 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE 1 TO int1
MOVE 4 TO int2
MOVE 0 TO int3
DISPLAY "int1 = 1"
DISPLAY "int2 = 4"
DISPLAY "int3 = 0"
MOVE "7.67" TO c4
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 3"
DISPLAY " TYPE = :int1, LENGTH = :int2,"
DISPLAY " INDICATOR = :int3, DATA = :c4;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 3
TYPE = :int1, LENGTH = :int2,
INDICATOR = :int3, DATA = :c4 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE 4 TO int1
DISPLAY "int1 = 4"
MOVE 5 TO int2
DISPLAY "SET DESCRIPTOR 'D12431' VALUE :int1"
DISPLAY " TYPE = 2, PRECISION = 9, INDICATOR = 0, "
DISPLAY " DATA = :int2;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE :int1 TYPE = 2,
PRECISION = 9, INDICATOR = 0, DATA = :int2 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE 0 TO int2
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 5"
DISPLAY " TYPE = 2, PRECISION = 9, "
DISPLAY " INDICATOR = 0, DATA = :int2;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 5
TYPE = 2, PRECISION = 9, SCALE = 0, INDICATOR = 0,
DATA = :int2 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE "010.95" TO c6
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 6"
DISPLAY " TYPE = 1, LENGTH = 6,"
DISPLAY " INDICATOR = 0, DATA = :c6"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 6
TYPE = 1, LENGTH = 6,
INDICATOR = 0, DATA = :c6 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*17.5 GR.5.a: character set fields are automatically set
MOVE 2 TO int1
DISPLAY "int1 = 2"
MOVE "11" TO c2
DISPLAY "c2 = '", c2 "'"
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 7"
DISPLAY " TYPE = 1, INDICATOR = 0, LENGTH = :int1, DATA =
- " :c2;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 7
TYPE = 1, INDICATOR = 0, LENGTH = :int1, DATA = :c2
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE .3 TO flt1
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 8 TYPE = 2,"
DISPLAY " PRECISION = 8, SCALE = 4,"
DISPLAY " INDICATOR = 0, DATA = :flt1;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 8 TYPE = 2,
PRECISION = 8, SCALE = 4,
INDICATOR = 0, DATA = :flt1 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Here goes nothing
DISPLAY "dstmt=""INSERT INTO BANKTAB VALUES
- " (?,?,?,?,?,?,?,?)"""
MOVE "INSERT INTO BANKTAB VALUES (?,?,?,?,?,?,?,?) "
TO dstmt
DISPLAY "PREPARE S12431 FROM :dstmt;"
EXEC SQL PREPARE S12431 FROM :dstmt END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
DISPLAY "EXECUTE S12431 USING SQL DESCRIPTOR 'D12431';"
EXEC SQL EXECUTE S12431 USING SQL DESCRIPTOR 'D12431'
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
*Verify results without using descriptors
COMPUTE int1 = -1
DISPLAY "SELECT COUNT(*) INTO :int1 FROM BANKTAB"
DISPLAY " WHERE NAAM IS NULL"
DISPLAY " AND BALANCE >= 3785.19 AND BALANCE <= 3785.21"
DISPLAY " AND INTEREST = 7.67"
DISPLAY " AND TRANSACTIONS = 5"
DISPLAY " AND PAYMENTS = 0"
DISPLAY " AND INTEREST_RATE >= 10.94 AND INTEREST_RATE <=
- " 10.96"
DISPLAY " AND ANNUAL_YIELD >= 10.99 AND ANNUAL_YIELD <=
- " 11.01"
DISPLAY " AND FRACTIONAL_CENTS >= 0.29 AND
- " FRACTIONAL_CENTS <= 0.31;"
EXEC SQL SELECT COUNT(*) INTO :int1 FROM BANKTAB
WHERE NAAM IS NULL
AND BALANCE >= 3785.19 AND BALANCE <= 3785.21
AND INTEREST = 7.67
AND TRANSACTIONS = 5
AND PAYMENTS = 0
AND INTEREST_RATE >= 10.94 AND INTEREST_RATE <= 10.96
AND ANNUAL_YIELD >= 10.99 AND ANNUAL_YIELD <= 11.01
AND FRACTIONAL_CENTS >= 0.29 AND FRACTIONAL_CENTS <= 0.31
END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY "int1 should be 1; its value is ", int1
if (int1 NOT = 1) then
MOVE 0 TO flag
END-IF
*Now substitute some equal values in various fields in the
*descriptor and test for equality.
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 1"
DISPLAY " TYPE = 6, PRECISION = 1, INDICATOR = -1;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 1
TYPE = 6, PRECISION = 1, INDICATOR = -1 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE 0 TO bin2
DISPLAY "bin2 = 0"
MOVE 5 TO smint1
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 4"
DISPLAY " TYPE = 5, INDICATOR = :bin2, DATA = :smint1;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 4
TYPE = 5, INDICATOR = :bin2, DATA = :smint1 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE 0 TO bin9
MOVE 0 TO smint1
DISPLAY "bin9 = 0"
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 5"
DISPLAY " TYPE = 5, INDICATOR = :bin9, DATA = :smint1;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 5
TYPE = 5, INDICATOR = :bin9, DATA = :smint1 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
MOVE "010.950" TO c7
DISPLAY "SET DESCRIPTOR 'D12431' VALUE 6"
DISPLAY " TYPE = 1, LENGTH = 7,"
DISPLAY " INDICATOR = 0, DATA = :c7;"
EXEC SQL SET DESCRIPTOR 'D12431' VALUE 6
TYPE = 1, LENGTH = 7,
INDICATOR = 0, DATA = :c7 END-EXEC
MOVE SQLCODE TO SQL-COD
PERFORM CHCKOK
DISPLAY " "
EXEC SQL DELETE FROM CONCATBUF END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO CONCATBUF VALUES (
'SELECT COUNT(*) FROM BANKTAB' ||
' WHERE (NAAM = ? OR NAAM IS NULL) AND BALANCE = ?' ||
' AND INTEREST = ? AND TRANSACTIONS = ?' ||
' AND PAYMENTS = ? AND INTEREST_RATE = ?' ||
' AND ANNUAL_YIELD = ? AND FRACTIONAL_CENTS = ?'
) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT ZZ INTO :longst FROM CONCATBUF END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "longst=""", longst """"
DISPLAY "PREPARE S12432 FROM :longst;"
--> --------------------
--> maximum size reached
--> --------------------
¤ Dauer der Verarbeitung: 0.86 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.
|