Quelle cdr027.cob
Sprache: Cobol
IDENTIFICATION DIVISION .
PROGRAM-ID . CDR027.
ENVIRONMENT DIVISION .
CONFIGURATION SECTION .
SOURCE-COMPUTER . xyz.
OBJECT-COMPUTER . xyz.
DATA DIVISION .
WORKING-STORAGE SECTION .
* Standard COBOL (file "CDR027.SCO") calling SQL
* procedures in file "CDR027.MCO".
* STANDARD COBOL (file "CDR027.SCO")
****************************************************************
*
* COMMENT SECTION
*
* DATE 1991/07/30 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.
*
* CDR027.SCO
* WRITTEN BY: YOLANDA HERD
*
* MISCELLANEOUS
*
* 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 NME PIC X(20).
01 indic1 PIC S9(4) 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 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 "SUN" TO uid
CALL "AUTHID" USING uid
MOVE "not logged in, not" TO uidx
* EXEC SQL SELECT
* USER INTO :uidx FROM SUN.ECCO;
CALL "SUB1" USING SQLCODE uidx
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, cdr027.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 TEST0446 *******************
DISPLAY " TEST0446 "
DISPLAY " Table CHECK constraint allows unknown (NULL)"
DISPLAY " Reference: ANSI X3.168-1989 6.8 GR1"
DISPLAY "- - - - - - - - - - - - - - - - - - - - - - -"
* EXEC SQL DELETE FROM STAFF5;
CALL "SUB2" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO STAFF5
* VALUES('E7','Mimi',NULL,'Miami');
CALL "SUB3" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #1 STAFF5 = " , SQL-COD
COMPUTE indic1 = -1
MOVE 15 TO GRDE
* EXEC SQL INSERT INTO STAFF5
* VALUES('E8','Joe',:GRDE:indic1,'Boston');
CALL "SUB4" USING SQLCODE GRDE indic1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #2 STAFF5 = " , SQL-COD
* EXEC SQL INSERT INTO STAFF5(EMPNUM) VALUES('E9');
CALL "SUB5" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #3 STAFF5 = " , SQL-COD
* EXEC SQL UPDATE STAFF
* SET GRADE = NULL
* WHERE EMPNUM = 'E1';
CALL "SUB6" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after UPDATE STAFF 'E1' = " , SQL-COD
* EXEC SQL INSERT INTO STAFF5
* SELECT *
* FROM STAFF;
CALL "SUB7" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #4 STAFF5 = " , SQL-COD
* EXEC SQL UPDATE STAFF5
* SET GRADE = NULL
* WHERE EMPNUM = 'E2';
CALL "SUB8" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after UPDATE STAFF5 'E2' = " , SQL-COD
MOVE 13 TO GRDE
COMPUTE indic1 = -1
* EXEC SQL UPDATE STAFF5
* SET GRADE = :GRDE:indic1
* WHERE EMPNUM = 'E4';
CALL "SUB9" USING SQLCODE GRDE indic1
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after UPDATE STAFF5 'E4' = " , SQL-COD
MOVE 0 TO count1
MOVE 0 TO count2
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM STAFF5;
CALL "SUB10" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count2
* FROM STAFF5
* WHERE GRADE IS NULL;
CALL "SUB11" USING SQLCODE count2
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB12" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY " The correct answers are:"
DISPLAY " count1 = 8 and count2 = 6"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " count1 = " , count1 " and count2 = " , count2
if (count1 = 8 AND count2 = 6) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0446','pass','MCO');
CALL "SUB13" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " cdr027.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0446','fail','MCO');
CALL "SUB14" USING SQLCODE
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB15" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0446 *******************
******************** BEGIN TEST0447 *******************
DISPLAY " TEST0447 "
DISPLAY " with Check Constraint and Check Option"
DISPLAY " Reference: ANSI X3.168-1989 6.8 GR1, 6.9 GR3 a) "
DISPLAY "- - - - - - - - - - - - - - - - - - - - - - - - -"
MOVE 0 TO count1
MOVE 0 TO count2
MOVE "XXXXX" TO NME
MOVE 0 TO flag1
* EXEC SQL DELETE FROM STAFF6;
CALL "SUB16" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO STAFF6_WITH_GRADES
* VALUES('X1','Vicki',NULL,'Houston');
CALL "SUB17" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT STAFF6_WITH_GRADES = " ,
SQL-COD
if (SQLCODE NOT < 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL INSERT INTO STAFF6
* VALUES('X2','Tina',NULL,'Orlando');
CALL "SUB18" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT STAFF6 = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM STAFF6_WITH_GRADES;
CALL "SUB19" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT COUNT(*) INTO :count2
* FROM STAFF6;
CALL "SUB20" USING SQLCODE count2
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT EMPNAME INTO :NME
* FROM STAFF6
* WHERE GRADE IS NULL;
CALL "SUB21" USING SQLCODE NME
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB22" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (NME NOT = "Tina " ) then
MOVE 1 TO flag1
END-IF
DISPLAY " "
DISPLAY "The correct answers are:"
DISPLAY " count1 = 0, count2 = 1, flag1 = 0"
DISPLAY " "
DISPLAY "Your answers are:"
DISPLAY " count1 = " , count1 ", count2 = " , count2 ", flag1
- " = " , flag1
DISPLAY " "
if (count1 = 0 AND count2 = 1 AND flag1 = 0)
then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0447','pass','MCO');
CALL "SUB23" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " cdr027.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0447','fail','MCO');
CALL "SUB24" USING SQLCODE
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB25" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0447 *******************
******************** BEGIN TEST0448 *******************
DISPLAY " TEST0448 "
DISPLAY " Primary Key Implies UNIQUE"
DISPLAY " Reference: X3.135-1989 GR 2"
DISPLAY "- - - - - - - - - - - - - - - - - -"
MOVE 0 TO count1
MOVE 0 TO flag1
* EXEC SQL DELETE FROM STAFF9;
CALL "SUB26" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO STAFF9(EMPNUM,EMPNAME)
* VALUES('D1','Muddley');
CALL "SUB27" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #1 STAFF9 = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL INSERT INTO STAFF9(EMPNUM,EMPNAME)
* VALUES('D1','Muddley');
CALL "SUB28" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #2 STAFF9 = " , SQL-COD
if (SQLCODE NOT < 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL INSERT INTO STAFF9(EMPNUM,EMPNAME)
* VALUES('d1','Muddley');
CALL "SUB29" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #3 STAFF9 = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM STAFF9;
CALL "SUB30" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB31" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "The correct answers are:"
DISPLAY " flag1 = 0 and count1 = 2"
DISPLAY " "
DISPLAY "Your answers are:"
DISPLAY " flag1 = " , flag1 " and count1 = " , count1
DISPLAY " "
if (flag1 = 0 AND count1 = 2) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0448','pass','MCO');
CALL "SUB32" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " cdr027.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0448','fail','MCO');
CALL "SUB33" USING SQLCODE
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB34" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0448 *******************
******************** BEGIN TEST0449 *******************
DISPLAY " TEST0449 "
DISPLAY " Check Constraint Definition is Case Sensitive"
DISPLAY " Reference: 6.8 GR1, 5.11 GR 6, 5.1
- " format> "
DISPLAY " - - - - - - - - - - - - - - - - - - - - - - - - -
- " - - -"
MOVE 0 TO count1
MOVE 0 TO flag1
* EXEC SQL DELETE FROM STAFF9;
CALL "SUB35" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO STAFF9(EMPNUM,EMPNAME)
* VALUES('Z1','Tina');
CALL "SUB36" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #1 STAFF9 = " , SQL-COD
if (SQLCODE NOT < 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL INSERT INTO STAFF9(EMPNUM,EMPNAME)
* VALUES('Z2','tina');
CALL "SUB37" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #2 STAFF9 = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL INSERT INTO STAFF9(EMPNUM,EMPNAME)
* VALUES('Z3','ANTHONY');
CALL "SUB38" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after INSERT #3 STAFF9 = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM STAFF9;
CALL "SUB39" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB40" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY "The correct answers are:"
DISPLAY " flag1 = 0 and count1 = 2"
DISPLAY " "
DISPLAY "Your answers are:"
DISPLAY " flag1 = " , flag1 " and count1 = " , count1
if (flag1 = 0 AND count1 = 2) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0449','pass','MCO');
CALL "SUB41" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " cdr027.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0449','fail','MCO');
CALL "SUB42" USING SQLCODE
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB43" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0449 *******************
******************** BEGIN TEST0450 *******************
DISPLAY " TEST0450 "
DISPLAY " Referential Integrity is Case Sensitive"
DISPLAY " Reference: 5.11 GR6, 5.1 , 6.7
- " GR 1a) "
DISPLAY "- - - - - - - - - - - - - - - - - - - - - - - - -
- " - - - - -"
MOVE 0 TO flag1
* EXEC SQL INSERT INTO DEPT
* VALUES(11,'VOLLEYBALL','VICKI');
CALL "SUB44" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "insert parent(setup), SQLCODE = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL INSERT INTO DEPT
* VALUES(10,'volleyball','vicki');
CALL "SUB45" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "insert lower case value of parent(setup), SQLCODE
- " = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL INSERT INTO EMP
* VALUES(13,'MARY','Dancer',15,'VOLLEYBALL',010101)
* ;
CALL "SUB46" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "insert child(setup), SQLCODE = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL DELETE FROM DEPT
* WHERE DNO = 10;
CALL "SUB47" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after delete parent = " , SQL-COD
if (SQLCODE NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL UPDATE DEPT
* SET DNAME = 'EDUCATION'
* WHERE DNAME = 'Education';
CALL "SUB48" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after update parent = " , SQL-COD
if (SQLCODE NOT < 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL INSERT INTO EMP
* VALUES(28,'BARBARA','Jogger',14,'EDUCATION',010101)
* ;
CALL "SUB49" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after insert child = " , SQL-COD
if (SQLCODE NOT < 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL UPDATE EMP
* SET DNAME = 'PHYSICS'
* WHERE ENO = 25;
CALL "SUB50" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY "SQLCODE after update child = " , SQL-COD
if (SQLCODE NOT < 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL ROLLBACK WORK;
CALL "SUB51" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " "
DISPLAY "The correct answer is:"
DISPLAY " flag1 = 0"
DISPLAY " "
DISPLAY "Your answer is:"
DISPLAY " flag1 = " , flag1
if (flag1 = 0) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0450','pass','MCO');
CALL "SUB52" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " cdr027.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0450','fail','MCO');
CALL "SUB53" USING SQLCODE
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB54" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0450 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN .
* **** Procedures for PERFORM statements
quality 100%
¤ Dauer der Verarbeitung: 0.4 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland
2026-03-28