Quelle cdr026.cob
Sprache: Cobol
IDENTIFICATION DIVISION .
PROGRAM-ID . CDR026.
ENVIRONMENT DIVISION .
CONFIGURATION SECTION .
SOURCE-COMPUTER . xyz.
OBJECT-COMPUTER . xyz.
DATA DIVISION .
WORKING-STORAGE SECTION .
* Standard COBOL (file "CDR026.SCO") calling SQL
* procedures in file "CDR026.MCO".
*STANDARD COBOL (file "CDR026.SCO")
************************************************************
*
* COMMENT SECTION
*
* DATE 1991/06/20 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.
*
* CDR026.SCO
* WRITTEN BY: YOLANDA HERD
*
* THIS ROUTINE TESTS PARTIAL NULL FOREIGN KEYS
*
* REFERENCES
* AMERICAN NATIONAL STANDARD database language - SQL
* X3.135-1989
*
* SECTION 6.7, GR1 Referential Constraint Definition
*
*
************************************************************
* EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 DNME PIC X(20).
01 ENME PIC X(20).
01 NME PIC X(20).
01 DTE PIC S9(9) DISPLAY SIGN LEADING SEPARATE .
01 count1 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 code1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE .
01 code2 PIC S9(9) DISPLAY SIGN LEADING SEPARATE .
01 code3 PIC S9(9) DISPLAY SIGN LEADING SEPARATE .
01 code4 PIC S9(9) DISPLAY SIGN LEADING SEPARATE .
01 code5 PIC S9(9) DISPLAY SIGN LEADING SEPARATE .
01 code6 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 "SUN" 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, cdr026.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 TEST0438 *********************
* This program tests the Partial - NULL F.K.
* feature supported for insert F.k.
DISPLAY " TEST0438 "
DISPLAY " partial-NULL F.K. INSERT supported "
DISPLAY " reference Section 6.7 GR 1a, 1b "
DISPLAY "--------------------------------------------"
MOVE -1001 TO code1
MOVE 0 TO count1
MOVE 0 TO DTE
MOVE "XXXXXXXXXXXXXXXXXXXX" TO NME
* EXEC SQL DELETE FROM EXPERIENCE
* WHERE DESCR = 'Car Mechanic';
CALL "SUB1" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('Tom',NULL,NULL,'Car Mechanic');
CALL "SUB2" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('Yolanda',NULL,NULL,'Car Mechanic');
CALL "SUB3" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES(NULL,112156,NULL,'Car Mechanic');
CALL "SUB4" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES(NULL,062068,NULL,'Car Mechanic');
CALL "SUB5" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES(NULL,NULL,NULL,'Car Mechanic');
CALL "SUB6" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('Tom',052744,NULL,'Car Mechanic');
CALL "SUB7" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('Yolanda',040523,NULL,'Car Mechanic');
CALL "SUB8" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('Yolanda',062968,NULL,'Car Mechanic');
CALL "SUB9" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('Lilian',112156,NULL,'Car Mechanic');
CALL "SUB10" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL SELECT EXP_NAME, BTH_DATE INTO :NME, :DTE
* FROM EXPERIENCE
* WHERE EXP_NAME IS NOT NULL AND BTH_DATE IS NOT NULL
* AND DESCR = 'Car Mechanic';
CALL "SUB11" USING SQLCODE NME DTE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO code1
* EXEC SQL SELECT COUNT(*) INTO :count1 FROM EXPERIENCE
* WHERE DESCR = 'Car Mechanic';
CALL "SUB12" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
* EXEC SQL ROLLBACK WORK;
CALL "SUB13" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answers are:"
DISPLAY " code1 = 0 and count1 = 6"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " code1 = " , code1 " and count1 = " , count1
if (code1 = 0 AND count1 = 6) then
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0438','pass','MCO');
CALL "SUB14" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0438','fail','MCO');
ADD 1 TO errcnt
CALL "SUB15" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " cdr026.sco *** fail *** "
END-IF
DISPLAY
"==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB16" USING SQLCODE
MOVE SQLCODE TO SQL-COD
********************* END TEST0438 ******************
**************** BEGIN TEST0439 *********************
*This program tests partial-NULL F.K. feature
*support for update F.K.
DISPLAY " TEST0439 "
DISPLAY " partial-NULL F.K. UPDATE support "
DISPLAY " ------------------------------------------ "
MOVE 0 TO code1
MOVE 0 TO code2
MOVE 0 TO code3
MOVE 0 TO code4
MOVE 0 TO code5
MOVE 0 TO code6
MOVE 0 TO flag1
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('Lilian',NULL,NULL,'Soccer Player');
CALL "SUB17" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('David',NULL,NULL,'Monk');
CALL "SUB18" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES(NULL,NULL,NULL,'Fireman');
CALL "SUB19" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES(NULL,NULL,NULL,'Artist');
CALL "SUB20" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL UPDATE EXPERIENCE
* SET BTH_DATE = 040523
* WHERE EXP_NAME = 'Lilian' AND DESCR = 'Soccer Player'
* ;
CALL "SUB21" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO code1
if (code1 NOT < 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL UPDATE EXPERIENCE
* SET EXP_NAME = NULL
* WHERE DESCR = 'Photographer';
CALL "SUB22" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO code2
if (code2 NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL UPDATE EXPERIENCE
* SET EXP_NAME = NULL ,BTH_DATE = NULL
* WHERE DESCR = 'Fashion Model';
CALL "SUB23" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO code3
if (code3 NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL UPDATE EXPERIENCE
* SET BTH_DATE = 101024
* WHERE EXP_NAME = 'David' AND DESCR = 'Monk';
CALL "SUB24" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO code4
if (code4 NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL UPDATE EXPERIENCE
* SET EXP_NAME = 'Mary', BTH_DATE = 121245
* WHERE DESCR = 'Fireman';
CALL "SUB25" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO code5
if (code5 NOT = 0) then
MOVE 1 TO flag1
END-IF
* EXEC SQL UPDATE EXPERIENCE
* SET EXP_NAME = 'Dick' , BTH_DATE = 020454
* WHERE DESCR = 'Artist';
CALL "SUB26" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO code6
if (code6 NOT < 0) then
MOVE 1 TO flag1
END-IF
DISPLAY "The correct results are:"
DISPLAY " code1 < 0"
DISPLAY " code2 = 0"
DISPLAY " code3 = 0"
DISPLAY " code4 = 0"
DISPLAY " code5 = 0"
DISPLAY " code6 < 0"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " code1 = " , code1
DISPLAY " code2 = " , code2
DISPLAY " code3 = " , code3
DISPLAY " code4 = " , code4
DISPLAY " code5 = " , code5
DISPLAY " code6 = " , code6
* EXEC SQL ROLLBACK WORK;
CALL "SUB27" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (flag1 = 0) then
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0439','pass','MCO');
CALL "SUB28" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0439','fail','MCO');
ADD 1 TO errcnt
CALL "SUB29" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " cdr026.sco *** fail *** "
END-IF
DISPLAY
"==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB30" USING SQLCODE
MOVE SQLCODE TO SQL-COD
********************* END TEST0439 ******************
**************** BEGIN TEST0440 *********************
*This program tests partial-NULL F.K. no restrict
*P.K. update/delete
DISPLAY " TEST0440 "
DISPLAY " partial-NULL F.K. no restrict P.K.
- " update/delete "
DISPLAY " -------------------------------------------"
MOVE "XXXXXXXXXXXXXXXXXXXX" TO ENME
MOVE "XXXXXXXXXXXXXXXXXXXX" TO DNME
* EXEC SQL DELETE FROM EXPERIENCE
* WHERE EXP_NAME = 'Joseph' OR EXP_NAME = 'John';
CALL "SUB31" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('John',NULL,NULL,'Gardener');
CALL "SUB32" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO EXPERIENCE
* VALUES('Joseph',NULL,NULL,'Snake Charmer');
CALL "SUB33" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL DELETE FROM EMP
* WHERE ENAME = 'Joseph';
CALL "SUB34" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL UPDATE EMP
* SET ENAME = 'Joan'
* WHERE EDESC = 'Fraction';
CALL "SUB35" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 0 TO code1
* EXEC SQL SELECT ENAME INTO :ENME
* FROM EMP
* WHERE DNAME = 'Education';
CALL "SUB36" USING SQLCODE ENME
MOVE SQLCODE TO SQL-COD
MOVE SQLCODE TO code1
* EXEC SQL SELECT DNAME INTO :DNME
* FROM EMP
* WHERE ENAME = 'Joan';
CALL "SUB37" USING SQLCODE DNME
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct results are:"
DISPLAY " ENME = XXXXXXXXXXXXXXXXXXXX"
DISPLAY " DNME = Physics"
DISPLAY " "
DISPLAY " Your answers are:"
DISPLAY " ENME = " , ENME
DISPLAY " DNME = " , DNME
* EXEC SQL ROLLBACK WORK;
CALL "SUB38" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 0 TO flag1
if (ENME NOT = "XXXXXXXXXXXXXXXXXXXX" ) then
MOVE 1 TO flag1
END-IF
if (DNME NOT = "Physics" ) then
MOVE 1 TO flag1
END-IF
if (flag1 = 0 AND code1 = 100) then
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0440','pass','MCO');
CALL "SUB39" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " *** pass *** "
else
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0440','fail','MCO');
ADD 1 TO errcnt
CALL "SUB40" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " cdr026.sco *** fail *** "
END-IF
DISPLAY
"==================================================="
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB41" USING SQLCODE
MOVE SQLCODE TO SQL-COD
********************* END TEST0440 ******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN .
* **** Procedures for PERFORM statements
Messung V0.5 in Prozent C=72 H=100 G=86
¤ Dauer der Verarbeitung: 0.2 Sekunden
(vorverarbeitet am 2026-05-01)
¤
*© Formatika GbR, Deutschland
2026-05-26