IDENTIFICATION DIVISION.
PROGRAM-ID. DML077.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. xyz.
OBJECT-COMPUTER. xyz.
DATA DIVISION.
WORKING-STORAGE SECTION.
* Embedded SQL COBOL ("DML077.PCO") translated from
* Embedded C on Fri Aug 9 08:24:50 1991.
* EMBEDDED COBOL (file "DML077.PCO")
****************************************************************
*
* COMMENT SECTION
*
* DATE 1991/07/30 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.
*
* DML077.PCO
* WRITTEN BY: YOLANDA HERD
*
*
* REFERENCES
* AMERICAN NATIONAL STANDARD database language
* X3.135-1989
*
*
****************************************************************
EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 GRDE PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 count1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 count2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 count3 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 HRS PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 NUM PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 INT1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 INT2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 indic1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE.
01 ENUM PIC X(3).
01 EMPNO1 PIC X(3).
01 PNO1 PIC X(3).
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 i PIC S9(9) DISPLAY SIGN LEADING SEPARATE.
01 flag1 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
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, dml077.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 TEST0443 *******************
DISPLAY " TEST0443 "
DISPLAY " VIEW with check option rejects unknown (NULL)"
DISPLAY " Reference 6.9 GR 3a, 4.5 para 6 "
DISPLAY " - - - - - - - - - - - - - - - - - - - -"
EXEC SQL INSERT INTO TEMP_SS VALUES('E7',NULL,'Frankfurt')
END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after NULL literal INSERT = ", SQL-COD
MOVE 15 TO GRDE
COMPUTE indic1 = -1
EXEC SQL INSERT INTO TEMP_SS
VALUES('E8',:GRDE:indic1,'Atlanta') END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after NULL with indic INSERT = ", SQL-COD
EXEC SQL INSERT INTO TEMP_SS(EMPNUM) VALUES('E9') END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after NULL INSERT by excluding column = ",
SQL-COD
EXEC SQL UPDATE WORKS
SET HOURS = NULL
WHERE PNUM = 'P2' END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after UPDATE WORKS 'P2' = ", SQL-COD
EXEC SQL INSERT INTO TEMP_SS
SELECT PNUM,HOURS,'Nowhere'
FROM WORKS
WHERE EMPNUM = 'E1' END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT SELECT 'E1' = ", SQL-COD
EXEC SQL UPDATE TEMP_SS
SET GRADE = NULL
WHERE EMPNUM = 'E3' END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after UPDATE TEMP_SS 'E3' = ", SQL-COD
EXEC SQL UPDATE TEMP_SS
SET GRADE = :GRDE:indic1
WHERE EMPNUM = 'E5' END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after UPDATE TEMP_SS with indic = ",
SQL-COD
COMPUTE count1 = -1
COMPUTE count2 = -1
COMPUTE count3 = -1
EXEC SQL SELECT COUNT(*) INTO :count1
FROM STAFF
WHERE GRADE IS NULL END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count2
FROM TEMP_SS END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count3
FROM STAFF END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY " The correct answers are:"
DISPLAY " count1 = 0, count2 = 2 and count3 = 5"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " count1 = ", count1 ", count2 = ", count2 " and
- " count3 = ", count3
if (count1 = 0 AND count2 = 2 AND count3 = 5)
then
EXEC SQL INSERT INTO TESTREPORT
VALUES('0443','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
EXEC SQL INSERT INTO TESTREPORT
VALUES('0443','fail','PCO') END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
DISPLAY " dml077.pco *** fail *** "
END-IF
DISPLAY "================================================"
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0443 *******************
******************** BEGIN TEST0444 *******************
DISPLAY " TEST0444 "
DISPLAY " Updatable cursor, modify value selected on"
DISPLAY " reference X3.135-1989 "
DISPLAY " ---------------------------------------------"
MOVE "E1" TO ENUM
MOVE "XX" TO EMPNO1
EXEC SQL DECLARE Y CURSOR FOR
SELECT EMPNUM
FROM STAFF
WHERE EMPNUM > 'E1' END-EXEC
EXEC SQL DECLARE X CURSOR FOR
SELECT EMPNUM
FROM WORKS
WHERE EMPNUM > :ENUM END-EXEC
EXEC SQL OPEN X END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 1 TO i
PERFORM P50 UNTIL i > 7
EXEC SQL CLOSE X END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE "XX" TO EMPNO1
EXEC SQL OPEN Y END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 1 TO i
PERFORM P49 UNTIL i > 5
COMPUTE count1 = -1
COMPUTE count2 = -1
EXEC SQL SELECT COUNT(*) INTO :count1
FROM WORKS
WHERE EMPNUM > 'E5' END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT COUNT(*) INTO :count2
FROM STAFF
WHERE EMPNUM > 'E5' END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY " The correct answers are:"
DISPLAY " count1 = 6 and count2 = 4"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " count1 = ", count1 " and count2 = ", count2
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
if (count1 = 6 AND count2 = 4) then
EXEC SQL INSERT INTO TESTREPORT
VALUES('0444','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
EXEC SQL INSERT INTO TESTREPORT
VALUES('0444','fail','PCO') END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
DISPLAY " dml077.pco *** fail *** "
END-IF
DISPLAY "================================================"
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0444 *******************
******************** BEGIN TEST0445 *******************
DISPLAY " TEST0445 "
DISPLAY " Values not assigned to targets for SQLCODE=100 "
DISPLAY " reference X3.135-1989"
DISPLAY "
- " ----------------------------------------------------"
MOVE 0 TO flag1
MOVE "ZZZ" TO PNO1
EXEC SQL SELECT PNUM INTO :PNO1
FROM WORKS
WHERE HOURS = 13 END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "PNO1 = ", PNO1 ", SQLCODE after SELECT PNUM = ",
SQL-COD
DISPLAY " "
if (SQLCODE NOT = 100 OR PNO1 NOT = "ZZZ") then
MOVE 1 TO flag1
END-IF
MOVE 99 TO HRS
EXEC SQL SELECT HOURS INTO :HRS
FROM WORKS
WHERE EMPNUM = 'E4' AND PNUM = 'P1' END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "HRS = ", HRS ", SQLCODE after SELECT HOURS = ",
SQL-COD
DISPLAY " "
if (SQLCODE NOT = 100 OR HRS NOT = 99) then
MOVE 1 TO flag1
END-IF
MOVE 999 TO NUM
EXEC SQL SELECT COL1 INTO :NUM
FROM VTABLE
WHERE COL2 > 500 END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY "NUM = ", NUM ", SQLCODE after SELECT COL1 = ",
SQL-COD
if (SQLCODE NOT = 100 OR NUM NOT = 999) then
MOVE 1 TO flag1
END-IF
EXEC SQL DECLARE XX CURSOR FOR
SELECT PNUM,HOURS
FROM WORKS
WHERE EMPNUM > 'E1' END-EXEC
EXEC SQL DECLARE YY CURSOR FOR
SELECT COL2, COL3
FROM VTABLE END-EXEC
MOVE 0 TO count1
MOVE 0 TO count2
MOVE "YY" TO PNO1
MOVE 99 TO HRS
MOVE 99 TO INT1
MOVE 99 TO INT2
EXEC SQL OPEN XX END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 1 TO i
PERFORM P48 UNTIL i > 14
EXEC SQL CLOSE XX END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL OPEN YY END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE 1 TO i
PERFORM P47 UNTIL i > 9
EXEC SQL CLOSE YY END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY "The correct answers are:"
DISPLAY " count1 = 6, count2 = 4 and flag1 = 0"
DISPLAY " "
DISPLAY "Your answers are:"
DISPLAY " count1 = ", count1 ", count2 = ", count2 " and
- " flag1 = ", flag1
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
if (count1 = 6 AND count2 = 4 AND flag1 = 0)
then
EXEC SQL INSERT INTO TESTREPORT
VALUES('0445','pass','PCO') END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
EXEC SQL INSERT INTO TESTREPORT
VALUES('0445','fail','PCO') END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
DISPLAY " dml077.pco *** fail *** "
END-IF
DISPLAY "================================================"
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0445 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN.
* **** Procedures for PERFORM statements
P50.
EXEC SQL FETCH X INTO :EMPNO1 END-EXEC
MOVE SQLCODE TO SQL-COD
if (EMPNO1 = "E2") then
MOVE "E9" TO EMPNO1
END-IF
if (EMPNO1 = "E3") then
MOVE "E7" TO EMPNO1
END-IF
if (EMPNO1 = "E4") then
MOVE "E6" TO EMPNO1
END-IF
EXEC SQL UPDATE WORKS
SET EMPNUM = :EMPNO1
WHERE CURRENT OF X END-EXEC
MOVE SQLCODE TO SQL-COD
ADD 1 TO i
.
P49.
EXEC SQL FETCH Y INTO :EMPNO1 END-EXEC
MOVE SQLCODE TO SQL-COD
if (EMPNO1 = "E2") then
MOVE "E9" TO EMPNO1
END-IF
if (EMPNO1 = "E3") then
MOVE "E7" TO EMPNO1
END-IF
if (EMPNO1 = "E4") then
MOVE "E6" TO EMPNO1
END-IF
if (EMPNO1 = "E5") then
MOVE "E8" TO EMPNO1
END-IF
EXEC SQL UPDATE STAFF
SET EMPNUM = :EMPNO1
WHERE CURRENT OF Y END-EXEC
MOVE SQLCODE TO SQL-COD
ADD 1 TO i
.
P48.
EXEC SQL FETCH XX INTO :PNO1, :HRS END-EXEC
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0) then
COMPUTE count1 = count1 + 1
END-IF
ADD 1 TO i
.
P47.
EXEC SQL FETCH YY INTO :INT1, :INT2 END-EXEC
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0) then
COMPUTE count2 = count2 + 1
END-IF
ADD 1 TO i
.
¤ Dauer der Verarbeitung: 0.7 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.
|