Impressum dml069.cob
Sprache: Cobol
IDENTIFICATION DIVISION .
PROGRAM-ID . DML069.
ENVIRONMENT DIVISION .
CONFIGURATION SECTION .
SOURCE-COMPUTER . xyz.
OBJECT-COMPUTER . xyz.
DATA DIVISION .
WORKING-STORAGE SECTION .
* Standard COBOL (file "DML069.SCO") calling SQL
* procedures in file "DML069.MCO".
****************************************************************
*
* COMMENT SECTION
*
* DATE 1990/11/28 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.
*
* DML069.SCO
* 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 .
* EXEC SQL END DECLARE SECTION END-EXEC
01 uid PIC X(18).
01 uidx PIC X(18).
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
CALL "AUTHCK" USING SQLCODE uidx
MOVE SQLCODE TO SQL-COD
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, Module COBOL, dml069.sco"
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, HOURS FROM WORKS
* WHERE EMPNUM = 'E1'
* ORDER BY HOURS DESC END-EXEC
* EXEC SQL OPEN SMURF END-EXEC
CALL "SUB1" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH SMURF INTO :PNUM1, :HOURS1 END-EXEC
CALL "SUB2" USING SQLCODE PNUM1 HOURS1
MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH SMURF INTO :PNUM2, :HOURS2 END-EXEC
CALL "SUB3" USING SQLCODE PNUM2 HOURS2
MOVE SQLCODE TO SQL-COD
* EXEC SQL CLOSE SMURF END-EXEC
CALL "SUB4" USING SQLCODE
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','MCO') END-EXEC
CALL "SUB5" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0404','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB6" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK END-EXEC
CALL "SUB7" USING SQLCODE
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
CALL "SUB8" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO CUGINI.VTABLE
* VALUES (80, 100, 100, 100, 100.0) END-EXEC
CALL "SUB9" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO CUGINI.VTABLE
* VALUES (40, 200, 100, 100, 100.0) END-EXEC
CALL "SUB10" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL DECLARE BEE CURSOR FOR
* SELECT PNUM, HOURS FROM WORKS
* WHERE EMPNUM = 'E1'
* ORDER BY HOURS 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
CALL "SUB11" USING SQLCODE
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
CALL "SUB12" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK END-EXEC
CALL "SUB13" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (count1 = 2 AND flag = 1) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0405','pass','MCO') END-EXEC
CALL "SUB14" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0405','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB15" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK END-EXEC
CALL "SUB16" USING SQLCODE
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
CALL "SUB17" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO CUGINI.VTABLE
* VALUES (80, 100, 100, 100, 100.0) END-EXEC
CALL "SUB18" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO CUGINI.VTABLE
* VALUES (40, 200, 100, 100, 100.0) END-EXEC
CALL "SUB19" USING SQLCODE
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
CALL "SUB20" USING SQLCODE PNUM1
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK END-EXEC
CALL "SUB21" USING SQLCODE
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','MCO') END-EXEC
CALL "SUB22" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0406','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB23" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK END-EXEC
CALL "SUB24" USING SQLCODE
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
CALL "SUB25" USING SQLCODE PNUM1 HOURS1
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','MCO') END-EXEC
CALL "SUB26" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0407','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB27" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK END-EXEC
CALL "SUB28" USING SQLCODE
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
CALL "SUB29" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO WORKS1
* SELECT * FROM WORKS END-EXEC
CALL "SUB30" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL UPDATE WORKS1
* SET PNUM = EMPNUM, EMPNUM = PNUM, HOURS = (HOURS + 3) *
* HOURS END-EXEC
CALL "SUB31" USING SQLCODE
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
CALL "SUB32" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH TURTLE INTO :EMPNO1, :PNUM1, :HOURS1
* END-EXEC
CALL "SUB33" USING SQLCODE EMPNO1 PNUM1 HOURS1
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
CALL "SUB34" USING SQLCODE EMPNO1 PNUM1 HOURS1
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
CALL "SUB35" USING SQLCODE EMPNO1 PNUM1 HOURS1
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
CALL "SUB36" USING SQLCODE EMPNO1 PNUM1 HOURS1
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
CALL "SUB37" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK END-EXEC
CALL "SUB38" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (flag = 1) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0408','pass','MCO') END-EXEC
CALL "SUB39" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml069.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0408','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB40" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK END-EXEC
CALL "SUB41" USING SQLCODE
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
CALL "SUB42" USING SQLCODE TEMP1 TEMP2
MOVE SQLCODE TO SQL-COD
* EXEC SQL OPEN BEE END-EXEC
CALL "SUB43" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 1 TO cnt
PERFORM P49 UNTIL cnt > 6
ADD 1 TO cnt2
* EXEC SQL CLOSE BEE END-EXEC
CALL "SUB44" USING SQLCODE
MOVE SQLCODE TO SQL-COD
.
P49.
* EXEC SQL FETCH BEE INTO :PNUM1, :HOURS1 END-EXEC
CALL "SUB45" USING SQLCODE PNUM1 HOURS1
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=78 H=100 G=89
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.16Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-04-30)
¤
*Eine klare Vorstellung vom Zielzustand
2026-05-26