IDENTIFICATION DIVISION.
PROGRAM-ID. DML060.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. xyz.
OBJECT-COMPUTER. xyz.
DATA DIVISION.
WORKING-STORAGE SECTION.
* Standard COBOL (file "DML060.SCO") calling SQL
* procedures in file "DML060.MCO"
****************************************************************
*
* COMMENT SECTION
*
* DATE 1989/07/21 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.
*
* DML060.SCO
* WRITTEN BY: SUN DAJUN
* TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE
*
* THIS ROUTINE TESTS THE SET FUNCTION SPECIFICATION IN
* COMMON ELEMENTS OF THE SQL LANGUAGE.
*
* REFERENCES
* AMERICAN NATIONAL STANDARD database language - SQL
* X3.135-1989
*
* SECTION 5.21 <where clause>
* SECTION 5.9 <value expression>
*
****************************************************************
* EXEC SQL BEGIN DECLARE SECTION END-EXEC
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 EMPNO1 PIC X(3).
01 PNO1 PIC X(3).
01 PNO2 PIC X(3).
01 HOURS1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 ii PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
* EXEC SQL END DECLARE SECTION END-EXEC
01 SQLCODE PIC S9(9) COMP.
01 errcnt PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
01 uid PIC X(18).
01 uidx PIC X(18).
01 i PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
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, dml060.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 TEST0261 *******************
DISPLAY " Computation in Where Clause "
DISPLAY "Reference X3.135-1989 section 5.9 General Rules "
DISPLAY " ------------------------------------------ "
DISPLAY " TEST0261 "
DISPLAY " Reference 5.9 General Rules )"
DISPLAY " - - - - - - - - - - - - - - - - - - - - - "
DISPLAY " "
DISPLAY " DECLARE SUN CURSOR "
DISPLAY " FOR SELECT COL1, COL2"
DISPLAY " FROM VTABLE"
DISPLAY " WHERE (:int3 * (COL3 - COL2)) BETWEEN 5
- " AND 200"
DISPLAY " ORDER BY COL1;"
DISPLAY " "
MOVE 2 TO int3
* EXEC SQL DECLARE SUN CURSOR
* FOR SELECT COL1, COL2
* FROM VTABLE
* WHERE (:int3 * (COL3 - COL2)) BETWEEN 5 AND 200
* ORDER BY COL1 END-EXEC
* EXEC SQL OPEN SUN;
CALL "SUB1" USING SQLCODE int3
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answer is :"
DISPLAY " 10, 20"
DISPLAY " 100, 200"
DISPLAY " Your answer is :"
MOVE 0 TO flag
* EXEC SQL FETCH SUN INTO :int1,:int2;
CALL "SUB2" USING SQLCODE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY " ", int1 ", ", int2
if (int1 = 10 AND int2 = 20) then
MOVE flag TO flag
else
MOVE 1 TO flag
END-IF
* EXEC SQL FETCH SUN INTO :int1,:int2;
CALL "SUB3" USING SQLCODE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY " ", int1 ", ", int2
if (int1 = 100 AND int2 = 200) then
MOVE flag TO flag
else
MOVE 1 TO flag
END-IF
* EXEC SQL CLOSE SUN;
CALL "SUB4" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (flag = 0) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0261','pass','MCO') END-EXEC
CALL "SUB5" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml060.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0261','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB6" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB7" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0261 *******************
******************** BEGIN TEST0262 *******************
DISPLAY " Computation in Where Clause "
DISPLAY "Reference X3.135-1989 section 5.9 General Rules "
DISPLAY " ------------------------------------------ "
DISPLAY " TEST0262 "
DISPLAY " Reference 5.9 General Rules )"
DISPLAY " - - - - - - - - - - - - - - - - - - - - - "
DISPLAY " "
DISPLAY " "
DISPLAY " UPDATE VTABLE"
DISPLAY " SET COL1 = 1"
DISPLAY " WHERE COL1 = 0;"
DISPLAY " "
DISPLAY " DECLARE SUN1 CURSOR "
DISPLAY " FOR SELECT COL1, COL2"
DISPLAY " FROM VTABLE"
DISPLAY " WHERE (COL3 * COL2 / COL1) > ALL"
DISPLAY " (SELECT HOURS FROM WORKS)"
DISPLAY " OR -(COL3 * COL2 /COL1) >
- " ANY"
DISPLAY " (SELECT HOURS FROM WORKS)"
DISPLAY " ORDER BY COL1;"
DISPLAY " "
* EXEC SQL UPDATE VTABLE
* SET COL1 = 1
* WHERE COL1 = 0 END-EXEC
CALL "SUB8" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL DECLARE SUN1 CURSOR
* FOR SELECT COL1, COL2
* FROM VTABLE
* WHERE (COL3 * COL2 / COL1) > ALL
* (SELECT HOURS FROM WORKS)
* OR -(COL3 * COL2 /COL1) > ANY
* (SELECT HOURS FROM WORKS)
* ORDER BY COL1 END-EXEC
* EXEC SQL OPEN SUN1;
CALL "SUB9" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answer is :"
DISPLAY " 100, 200"
DISPLAY " 1000, -2000"
DISPLAY " Your answer is :"
MOVE 0 TO flag
* EXEC SQL FETCH SUN1 INTO :int1,:int2;
CALL "SUB10" USING SQLCODE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY " ", int1 ", ", int2
if (int1 = 100 AND int2 = 200) then
MOVE flag TO flag
else
MOVE 1 TO flag
END-IF
* EXEC SQL FETCH SUN1 INTO :int1,:int2;
CALL "SUB11" USING SQLCODE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY " ", int1 ", ", int2
if (int1 = 1000 AND int2 = -2000) then
MOVE flag TO flag
else
MOVE 1 TO flag
END-IF
* EXEC SQL CLOSE SUN1;
CALL "SUB12" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB13" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (flag = 0) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0262','pass','MCO') END-EXEC
CALL "SUB14" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml060.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0262','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB15" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB16" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0262 *******************
******************** BEGIN TEST0263 *******************
DISPLAY " Computation in ORDER BY "
DISPLAY "Reference X3.135-1989 section 5.9 General Rules "
DISPLAY " ------------------------------------------ "
DISPLAY " TEST0263 "
DISPLAY " Reference 5.9 General Rules )"
DISPLAY " - - - - - - - - - - - - - - - - - - - - - "
DISPLAY " "
DISPLAY " FOR SELECT COL1, COL3 * COL2 /COL1 -
- " COL2 + 10"
DISPLAY " FROM VTABLE"
DISPLAY " WHERE COL1 > 0"
DISPLAY " ORDER BY 2;"
DISPLAY " "
* EXEC SQL DECLARE SUN2 CURSOR
* FOR SELECT COL1, (COL3 * COL2 /COL1 - COL2 + 10)
* FROM VTABLE
* WHERE COL1 > 0
* ORDER BY 2 END-EXEC
* EXEC SQL OPEN SUN2;
CALL "SUB17" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answer is :"
DISPLAY " 1000, -3990"
DISPLAY " 10, 50"
DISPLAY " 100, 410"
DISPLAY " Your answer is :"
MOVE 0 TO flag
* EXEC SQL FETCH SUN2 INTO :int1,:int2;
CALL "SUB18" USING SQLCODE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY " ", int1 ", ", int2
if (int1 = 1000 AND int2 = -3990) then
MOVE flag TO flag
else
MOVE 1 TO flag
END-IF
* EXEC SQL FETCH SUN2 INTO :int1,:int2;
CALL "SUB19" USING SQLCODE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY " ", int1 ", ", int2
if (int1 = 10 AND int2 = 50) then
MOVE flag TO flag
else
MOVE 1 TO flag
END-IF
* EXEC SQL FETCH SUN2 INTO :int1,:int2;
CALL "SUB20" USING SQLCODE int1 int2
MOVE SQLCODE TO SQL-COD
DISPLAY " ", int1 ", ", int2
if (int1 = 100 AND int2 = 410) then
MOVE flag TO flag
else
MOVE 1 TO flag
END-IF
* EXEC SQL CLOSE SUN2;
CALL "SUB21" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (flag = 0) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0263','pass','MCO') END-EXEC
CALL "SUB22" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml060.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0263','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB23" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB24" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0263 *******************
******************** BEGIN TEST0265 *******************
DISPLAY " TEST0265 "
DISPLAY " update: positioned -- view with check option"
DISPLAY "reference X3.135-1989 section 6.6 General Rules 2)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
MOVE 0 TO i
*EXEC SQL CREATE VIEW SUBSP (EMPNUM,PNUM,HOURS)
* AS SELECT EMPNUM,PNUM,HOURS
* FROM WORKS
* WHERE EMPNUM='E3'
* WITH CHECK OPTION;
DISPLAY " "
DISPLAY " INSERT INTO WORKS"
DISPLAY " VALUES ('E3','P4',50);"
DISPLAY " "
DISPLAY " DECLARE DIPER CURSOR"
DISPLAY " FOR SELECT EMPNUM,PNUM,HOURS"
DISPLAY " FROM SUBSP;"
DISPLAY " "
DISPLAY " UPDATE SUBSP"
DISPLAY " SET EMPNUM='E9'"
DISPLAY " WHERE CURRENT OF DIPER;"
DISPLAY " "
* EXEC SQL INSERT INTO WORKS
* VALUES ('E3','P4',50) END-EXEC
CALL "SUB25" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL DECLARE DIPER CURSOR
* FOR SELECT EMPNUM,PNUM,HOURS
* FROM SUBSP END-EXEC
* FOR UPDATE OF EMPNUM;
* EXEC SQL OPEN DIPER;
CALL "SUB26" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH DIPER INTO :EMPNO1,:PNO1,:HOURS1;
CALL "SUB27" USING SQLCODE EMPNO1 PNO1 HOURS1
MOVE SQLCODE TO SQL-COD
DISPLAY " EMPNO1=", EMPNO1 ", PNO1=", PNO1 " and HOURS1=",
HOURS1 " "
* EXEC SQL UPDATE SUBSP
* SET EMPNUM='E9'
* WHERE CURRENT OF DIPER END-EXEC
CALL "SUB28" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO i
* EXEC SQL CLOSE DIPER;
CALL "SUB29" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB30" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "The answer should be: i < 0 "
DISPLAY " Your answer is :"
DISPLAY " i = ", i " "
if (i < 0) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0265','pass','MCO') END-EXEC
CALL "SUB31" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml060.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0265','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB32" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB33" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0265 *******************
******************** BEGIN TEST0266 *******************
DISPLAY " TEST0266 "
DISPLAY " update: positioned -- UNIQUE violation under view
- " "
DISPLAY "reference X3.135-1989 section 8.11 General Rules 5)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
MOVE 0 TO i
*EXEC SQL CREATE VIEW SUBSP (EMPNUM,PNUM,HOURS)
* AS SELECT EMPNUM,PNUM,HOURS
* FROM WORKS
* WHERE EMPNUM='E3'
* WITH CHECK OPTION;
DISPLAY " "
DISPLAY " INSERT INTO WORKS"
DISPLAY " VALUES ('E3','P4',50);"
DISPLAY " "
DISPLAY " DECLARE DOVE CURSOR"
DISPLAY " FOR SELECT EMPNUM,PNUM,HOURS"
DISPLAY " FROM SUBSP;"
DISPLAY " "
DISPLAY " UPDATE SUBSP"
DISPLAY " SET PNUM='P6'"
DISPLAY " WHERE CURRENT OF DOVE;"
DISPLAY " "
* EXEC SQL INSERT INTO WORKS
* VALUES ('E3','P4',50) END-EXEC
CALL "SUB34" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL DECLARE DOVE CURSOR
* FOR SELECT EMPNUM,PNUM,HOURS
* FROM SUBSP END-EXEC
* FOR UPDATE OF PNUM;
* EXEC SQL OPEN DOVE;
CALL "SUB35" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH DOVE INTO :EMPNO1,:PNO1,:HOURS1;
CALL "SUB36" USING SQLCODE EMPNO1 PNO1 HOURS1
MOVE SQLCODE TO SQL-COD
DISPLAY " EMPNO1=", EMPNO1 ", PNO1=", PNO1 " and HOURS1=",
HOURS1 " "
* EXEC SQL UPDATE SUBSP
* SET PNUM='P6'
* WHERE CURRENT OF DOVE END-EXEC
CALL "SUB37" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH DOVE INTO :EMPNO1,:PNO1,:HOURS1;
CALL "SUB38" USING SQLCODE EMPNO1 PNO1 HOURS1
MOVE SQLCODE TO SQL-COD
DISPLAY " EMPNO1=", EMPNO1 ", PNO1=", PNO1 " and HOURS1=",
HOURS1 " "
* EXEC SQL UPDATE SUBSP
* SET PNUM='P6'
* WHERE CURRENT OF DOVE END-EXEC
CALL "SUB39" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO i
* EXEC SQL CLOSE DOVE;
CALL "SUB40" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB41" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "The answer should be: i < 0" " "
DISPLAY " Your answer is :"
DISPLAY " i = ", i " "
if (i < 0) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0266','pass','MCO') END-EXEC
CALL "SUB42" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml060.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0266','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB43" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB44" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0266 *******************
******************** BEGIN TEST0267 *******************
DISPLAY " Update compound key, interim uniqueness conflict"
DISPLAY "Reference X3.135-1989 sections 6.6 GR2 and 8.12 GR2
- " "
DISPLAY " ------------------------------------------ "
DISPLAY " TEST0267 "
DISPLAY " Reference 5.9 General Rules )"
DISPLAY " - - - - - - - - - - - - - - - - - - - - - "
DISPLAY " UPDATE WORKS1"
DISPLAY " SET PNUM = EMPNUM, EMPNUM = PNUM;"
* EXEC SQL DECLARE PANDA CURSOR
* FOR SELECT DISTINCT PX.PNUM,PY.PNUM
* FROM WORKS PX, WORKS PY
* ORDER BY 2 DESC END-EXEC
* EXEC SQL DELETE FROM WORKS1;
CALL "SUB45" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL OPEN PANDA;
CALL "SUB46" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 1 TO ii
PERFORM P50 UNTIL ii > 36
* EXEC SQL CLOSE PANDA;
CALL "SUB47" USING SQLCODE
MOVE SQLCODE TO SQL-COD
COMPUTE i = -1
* EXEC SQL UPDATE WORKS1
* SET PNUM = EMPNUM, EMPNUM = PNUM END-EXEC
CALL "SUB48" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO i
MOVE 0 TO HOURS1
* EXEC SQL SELECT COUNT(*)
* INTO :HOURS1 FROM WORKS1
* WHERE EMPNUM = 'P1' AND HOURS > 30 END-EXEC
CALL "SUB49" USING SQLCODE HOURS1
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answer is :"
DISPLAY " i = 0"
DISPLAY " count1 = 6"
DISPLAY " Your answer is :"
DISPLAY " i = ", i
DISPLAY " count1 = ", HOURS1
* EXEC SQL CLOSE PANDA;
CALL "SUB50" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB51" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (i = 0 AND HOURS1 = 6) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0267','pass','MCO') END-EXEC
CALL "SUB52" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml060.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0267','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB53" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==============================================="
* EXEC SQL COMMIT WORK;
CALL "SUB54" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0267 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN.
* **** Procedures for PERFORM statements
P50.
* EXEC SQL FETCH PANDA INTO :PNO1,:PNO2;
CALL "SUB55" USING SQLCODE PNO1 PNO2
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO WORKS1
* VALUES(:PNO1,:PNO2,:ii) END-EXEC
CALL "SUB56" USING SQLCODE PNO1 PNO2 ii
MOVE SQLCODE TO SQL-COD
ADD 1 TO ii
.
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.33Angebot
Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können
¤
|
Lebenszyklus
Die hierunter aufgelisteten Ziele sind für diese Firma wichtig
Ziele
Entwicklung einer Software für die statische Quellcodeanalyse
|