IDENTIFICATION DIVISION .
PROGRAM-ID . DML069.
ENVIRONMENT DIVISION .
CONFIGURATION SECTION .
SOURCE-COMPUTER . xyz.
OBJECT-COMPUTER . xyz.
DATA DIVISION .
WORKING-STORAGE SECTION .
* Embedded SQL COBOL ("DML069.PCO") translated from
* Embedded C on Wed Jan 16 10:18:36 1991.
****************************************************************
*
* COMMENT SECTION
*
* DATE 1990/11/28 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.
*
* DML069.PCO
* WRITTEN BY: SUN DAJUN
*
* THIS ROUTINE TESTS SOME CURSOR FEATURES AND UPDATE.
*
* REFERENCES
* AMERICAN NATIONAL STANDARD database language - SQL
* X3.135-1989
*
*
****************************************************************
EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 HOURS1 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 HOURS2 PIC S9(7 )V99 DISPLAY SIGN LEADING SEPARATE .
01 PNUM1 PIC X(2 ).
01 PNUM2 PIC X(9 ).
01 EMPNO1 PIC X(2 ).
01 TEMP1 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 TEMP2 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 uid PIC X(18 ).
01 uidx PIC X(18 ).
EXEC SQL END DECLARE SECTION END-EXEC
01 SQLCODE PIC S9(9 ) COMP .
01 errcnt PIC S9(4 ) DISPLAY SIGN LEADING SEPARATE .
01 flag PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 count1 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 cnt PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 cnt2 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 HOURS3 PIC Z(5 ).99 .
01 SQL-COD PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
* date_time declaration *
01 TO-DAY PIC 9 (6 ).
01 THE-TIME PIC 9 (8 ).
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
if (uid NOT = uidx) then
DISPLAY "ERROR: User " uid " expected."
DISPLAY "User " uidx " connected."
DISPLAY " "
STOP RUN
END-IF
MOVE 0 TO errcnt
DISPLAY
"SQL Test Suite, V6.0, Embedded COBOL, dml069.pco"
DISPLAY " "
DISPLAY
"59-byte ID"
DISPLAY "TEd Version #"
DISPLAY " "
* date_time print *
ACCEPT TO-DAY FROM DATE
ACCEPT THE-TIME FROM TIME
DISPLAY "Date run YYMMDD: " TO-DAY " at hhmmssff: " THE-TIME
******************** BEGIN TEST0404 *******************
DISPLAY " TEST0404 "
DISPLAY " 2 FETCHes (different target types) on same
- " cursor"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY " "
DISPLAY " DECLARE SMURF CURSOR FOR"
DISPLAY " SELECT PNUM, HOURS FROM WORKS"
DISPLAY " WHERE EMPNUM = 'E1'"
DISPLAY " ORDER BY HOURS DESC;"
DISPLAY " "
DISPLAY " "
DISPLAY " FETCH SMURF INTO :PNUM1, :HOURS1;"
DISPLAY " "
DISPLAY " FETCH SMURF INTO :PNUM2, :HOURS2;"
DISPLAY " "
MOVE 0 TO HOURS1
MOVE 0 TO HOURS2
MOVE "NV" TO PNUM1
MOVE "NV" TO PNUM2
EXEC SQL DECLARE SMURF CURSOR FOR
SELECT PNUM, HOURS2 FROM WORKS
WHERE EMPNUM = 'E1'
ORDER BY HOURS2 DESC END-EXEC
EXEC SQL OPEN SMURF END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL FETCH SMURF INTO :PNUM1, :HOURS1 END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL FETCH SMURF INTO :PNUM2, :HOURS2 END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL CLOSE SMURF END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE HOURS2 TO HOURS3
DISPLAY "The correct result is :"
DISPLAY " PNUM1 = P3, HOURS1 = 80"
DISPLAY " PNUM2 = P1 , HOURS2 = 40"
DISPLAY "Your answer is :"
DISPLAY " PNUM1 = " , PNUM1 " HOURS1 = " , HOURS1
DISPLAY " PNUM2 = " , PNUM2 " HOURS2 = " , HOURS3
if (HOURS1 = 80 AND HOURS2 = 40
AND PNUM1 = "P3" ) then
MOVE 1 TO flag
else
MOVE 0 TO flag
END-IF
if (PNUM2 = "P1" AND flag = 1 ) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0404' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0404' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0404 *******************
******************** BEGIN TEST0405 *******************
DISPLAY " TEST0405 "
DISPLAY " 2 cursors open from different schemas (coded
- " join)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY " "
DISPLAY " DECLARE BEE CURSOR FOR"
DISPLAY " SELECT PNUM, HOURS FROM WORKS"
DISPLAY " WHERE EMPNUM = 'E1';"
DISPLAY " "
DISPLAY " DECLARE FLOWER CURSOR FOR"
DISPLAY " SELECT COL1, COL2 FROM CUGINI.VTABLE;"
DISPLAY " "
EXEC SQL DELETE FROM CUGINI.VTABLE END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO CUGINI.VTABLE
VALUES (80 , 100 , 100 , 100 , 100 .0 ) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO CUGINI.VTABLE
VALUES (40 , 200 , 100 , 100 , 100 .0 ) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL DECLARE BEE CURSOR FOR
SELECT PNUM, HOURS2 FROM WORKS
WHERE EMPNUM = 'E1'
ORDER BY HOURS2 DESC END-EXEC
EXEC SQL DECLARE FLOWER CURSOR FOR
SELECT COL1, COL2 FROM CUGINI.VTABLE
ORDER BY COL1 DESC END-EXEC
EXEC SQL OPEN FLOWER END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "The correct result is :"
DISPLAY " PNUM1 = P3, HOURS1 = 80, TEMP2 = 100"
DISPLAY " PNUM1 = P1, HOURS1 = 40, TEMP2 = 200"
DISPLAY "Your answer is :"
MOVE 1 TO flag
MOVE 0 TO count1
MOVE 1 TO cnt2
PERFORM P50 UNTIL cnt2 > 2
EXEC SQL CLOSE FLOWER END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
if (count1 = 2 AND flag = 1 ) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0405' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0405' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0405 *******************
******************** BEGIN TEST0406 *******************
DISPLAY " TEST0406 "
DISPLAY " Subquery from different schema"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY " "
DISPLAY " SELECT PNUM INTO :PNUM1 FROM WORKS"
DISPLAY " WHERE EMPNUM = 'E1' AND HOURS IN "
DISPLAY " (SELECT COL1 FROM CUGINI.VTABLE"
DISPLAY " WHERE COL1 > 50);"
DISPLAY " "
MOVE "NV" TO PNUM1
EXEC SQL DELETE FROM CUGINI.VTABLE END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO CUGINI.VTABLE
VALUES (80 , 100 , 100 , 100 , 100 .0 ) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO CUGINI.VTABLE
VALUES (40 , 200 , 100 , 100 , 100 .0 ) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT PNUM INTO :PNUM1 FROM WORKS
WHERE EMPNUM = 'E1' AND HOURS IN
(SELECT COL1 FROM CUGINI.VTABLE
WHERE COL1 > 50 ) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "The correct result is :"
DISPLAY " PNUM1 = P3"
DISPLAY "Your answer is :"
DISPLAY " PNUM1 = " , PNUM1
if (PNUM1 = "P3" ) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0406' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0406' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0406 *******************
******************** BEGIN TEST0407 *******************
DISPLAY " TEST0407 "
DISPLAY " SELECT INTO :XX ... WHERE :XX ="
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY " "
DISPLAY " SELECT PNUM, HOURS INTO :PNUM1,
- " :HOURS1"
DISPLAY " FROM WORKS"
DISPLAY " WHERE :HOURS1 < HOURS AND PNUM >
- " :PNUM1;"
DISPLAY " "
MOVE 70 TO HOURS1
MOVE "P4" TO PNUM1
EXEC SQL SELECT PNUM, HOURS INTO :PNUM1, :HOURS1
FROM WORKS
WHERE :HOURS1 < HOURS AND PNUM > :PNUM1 END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "The correct result is :"
DISPLAY " PNUM1 = P5, HOURS1 = 80"
DISPLAY "Your answer is :"
DISPLAY " PNUM1 = " , PNUM1 " HOURS1 = " , HOURS1
if (HOURS1 = 80 AND HOURS2 = 40 AND PNUM1 =
"P5" ) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0407' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0407' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0407 *******************
******************** BEGIN TEST0408 *******************
DISPLAY " TEST0408 "
DISPLAY " UPDATE references column value BEFORE update"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY " UPDATE WORKS1"
DISPLAY " SET PNUM = EMPNUM, EMPNUM = PNUM, HOURS =
- " (HOURS + 3) * HOURS;"
EXEC SQL DELETE FROM WORKS1 END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL INSERT INTO WORKS1
SELECT * FROM WORKS END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL UPDATE WORKS1
SET PNUM = EMPNUM, EMPNUM = PNUM, HOURS = (HOURS + 3 ) *
HOURS END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL DECLARE TURTLE CURSOR FOR
SELECT * FROM WORKS1
WHERE EMPNUM = 'P2'
ORDER BY EMPNUM, PNUM ASC END-EXEC
MOVE 1 TO flag
MOVE 0 TO HOURS1
MOVE "NV" TO PNUM1
DISPLAY "The correct result is :"
DISPLAY "EMPNO1 = P2, PNUM1 = E1, HOURS1 = 460"
DISPLAY "EMPNO1 = P2, PNUM1 = E2, HOURS1 = 6640"
DISPLAY "EMPNO1 = P2, PNUM1 = E3, HOURS1 = 460"
DISPLAY "EMPNO1 = P2, PNUM1 = E4, HOURS1 = 460"
DISPLAY "Your answer is :"
EXEC SQL OPEN TURTLE END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL FETCH TURTLE INTO :EMPNO1, :PNUM1, :HOURS1
END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "EMPNO1 = " , EMPNO1 ", PNUM1 = " , PNUM1 ", HOURS1 =
- " " , HOURS1
if (EMPNO1 NOT = "P2" OR PNUM1 NOT = "E1" OR
HOURS1 NOT = 460 ) then
MOVE 0 TO flag
END-IF
EXEC SQL FETCH TURTLE INTO :EMPNO1, :PNUM1, :HOURS1
END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "EMPNO1 = " , EMPNO1 ", PNUM1 = " , PNUM1 ", HOURS1 =
- " " , HOURS1
if (EMPNO1 NOT = "P2" OR PNUM1 NOT = "E2" OR
HOURS1 NOT = 6640 ) then
MOVE 0 TO flag
END-IF
EXEC SQL FETCH TURTLE INTO :EMPNO1, :PNUM1, :HOURS1
END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "EMPNO1 = " , EMPNO1 ", PNUM1 = " , PNUM1 ", HOURS1 =
- " " , HOURS1
if (EMPNO1 NOT = "P2" OR PNUM1 NOT = "E3" OR
HOURS1 NOT = 460 ) then
MOVE 0 TO flag
END-IF
EXEC SQL FETCH TURTLE INTO :EMPNO1, :PNUM1, :HOURS1
END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "EMPNO1 = " , EMPNO1 ", PNUM1 = " , PNUM1 ", HOURS1 =
- " " , HOURS1
if (EMPNO1 NOT = "P2" OR PNUM1 NOT = "E4" OR
HOURS1 NOT = 460 ) then
MOVE 0 TO flag
END-IF
EXEC SQL CLOSE TURTLE END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
if (flag = 1 ) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0408' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0408' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0408 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN .
* **** Procedures for PERFORM statements
P50.
EXEC SQL FETCH FLOWER INTO :TEMP1, :TEMP2 END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL OPEN BEE END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 1 TO cnt
PERFORM P49 UNTIL cnt > 6
ADD 1 TO cnt2
EXEC SQL CLOSE BEE END-EXEC
MOVE SQLCODE TO SQL-COD
.
P49.
EXEC SQL FETCH BEE INTO :PNUM1, :HOURS1 END-EXEC
MOVE SQLCODE TO SQL-COD
if (SQLCODE NOT LESS 0 ) then
if (HOURS1 = TEMP1) then
DISPLAY " PNUM1 = " , PNUM1 ", HOURS1 = " ,
HOURS1 ", TEMP2 = " , TEMP2
if ((PNUM1 NOT = "P3" OR HOURS1 NOT = 80 OR
TEMP2 NOT = 100 ) AND count1 = 0 ) then
MOVE 0 TO flag
END-IF
if ((PNUM1 NOT = "P1" OR HOURS1 NOT = 40 OR
TEMP2 NOT = 200 ) AND count1 = 1 ) then
MOVE 0 TO flag
END-IF
COMPUTE count1 = count1 + 1
END-IF
END-IF
ADD 1 TO cnt
.
Messung V0.5 in Prozent C=93 H=99 G=95
¤ Dauer der Verarbeitung: 0.5 Sekunden
¤
*© Formatika GbR, Deutschland