IDENTIFICATION DIVISION .
PROGRAM-ID . DML020.
ENVIRONMENT DIVISION .
CONFIGURATION SECTION .
SOURCE-COMPUTER . xyz.
OBJECT-COMPUTER . xyz.
DATA DIVISION .
WORKING-STORAGE SECTION .
* Standard COBOL (file "DML020.SCO") calling SQL
* procedures in file "DML020.MCO"
****************************************************************
*
* COMMENT SECTION
*
* DATE 1987/08/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.
*
* DML020.SCO
* WRITTEN BY: HU YANPING
* TRANSLATED AUTOMATICALLY FROM EMBEDDED COBOL BY CHRIS SCHANZLE
*
* THIS ROUTINE TESTS THE JOIN QUERY FUNCTIONS IN SQL.
*
* REFERENCES
* AMERICAN NATIONAL STANDARD database language - SQL
* X3.135-1989
*
* SECTION 5.20 <from clause>
*
****************************************************************
* EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 PPNUM PIC X(3 ).
01 PNAME1 PIC X(20 ).
01 PTYPE PIC X(15 ).
01 BUGET1 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 PCITY PIC X(15 ).
01 EMPNO1 PIC X(3 ).
01 EMPNA1 PIC X(20 ).
01 GRADE1 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 SCITY PIC X(15 ).
01 i PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
* EXEC SQL END DECLARE SECTION END-EXEC
01 ii PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 uid PIC X(18 ).
01 uidx PIC X(18 ).
01 SQL-COD PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 SQLCODE PIC S9(9 ) COMP .
01 errcnt PIC S9(4 ) 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, dml020.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 TEST0080 *******************
DISPLAY " TEST0080 "
DISPLAY " reference X3.135-1989 section 5.20 <from clause>
- " GR"
DISPLAY "*** Simple equijoin. "
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY "*** SELECT
- " EMPNUM,EMPNAME,GRADE,STAFF.CITY,PNAME,PROJ.CITY "
DISPLAY "*** FROM STAFF, PROJ "
DISPLAY "*** WHERE STAFF.CITY = PROJ.CITY "
* EXEC SQL DECLARE SNP1 CURSOR FOR
* SELECT EMPNUM,EMPNAME,GRADE,STAFF.CITY, PNAME, PROJ.CITY
* FROM STAFF, PROJ
* WHERE STAFF.CITY = PROJ.CITY END-EXEC
* EXEC SQL OPEN SNP1;
CALL "SUB1" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 0 TO i
if (SQLCODE = 0 ) then
DISPLAY "EMPNUM GRADE STAFF.CITY PROJ.CITY "
END-IF
MOVE 1 TO ii
PERFORM P50 UNTIL ii > 19
* EXEC SQL CLOSE SNP1;
CALL "SUB2" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " i should be 10, i = " , i
if (i = 10 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0080','pass','MCO') END-EXEC
CALL "SUB3" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml020.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0080','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB4" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY " "
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB5" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0080 *******************
******************** BEGIN TEST0081 *******************
DISPLAY " TEST0081 "
DISPLAY " reference X3.135-1989 section 5.20 <from clause>
- " GR"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY "*** Join query with additional information. "
DISPLAY "*** SELECT
- " EMPNUM,EMPNAME,GRADE,STAFF.CITY,PNUM,PNAME"
DISPLAY " PTYPE,BUDGET,PROJ.CITY "
DISPLAY "*** FROM STAFF, PROJ "
DISPLAY "*** WHERE STAFF.CITY = PROJ.CITY "
DISPLAY "*** AND GRADE <> 12 "
* EXEC SQL DECLARE SNP3 CURSOR FOR
* SELECT EMPNUM,EMPNAME,GRADE,STAFF.CITY,PNUM,PNAME,
* PTYPE,BUDGET,PROJ.CITY
* FROM STAFF, PROJ
* WHERE STAFF.CITY = PROJ.CITY
* AND GRADE <> 12 END-EXEC
* EXEC SQL OPEN SNP3;
CALL "SUB6" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 0 TO i
MOVE 1 TO ii
PERFORM P49 UNTIL ii > 19
* EXEC SQL CLOSE SNP3;
CALL "SUB7" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " i should be 4, i = " , i
if (i = 4 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0081','pass','MCO') END-EXEC
CALL "SUB8" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml020.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0081','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB9" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY " "
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB10" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0081 *******************
******************** BEGIN TEST0082 *******************
DISPLAY " TEST0082 "
DISPLAY " reference X3.135-1989 section 5.20 <from clause>
- " GR"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY "*** Join of three tables. "
DISPLAY "*** SELECT DISTINCT STAFF.CITY, PROJ.CITY "
DISPLAY "*** FROM STAFF, WORKS, PROJ "
DISPLAY "*** WHERE STAFF.EMPNUM = WORKS.EMPNUM "
DISPLAY "*** AND WORKS.PNUM = PROJ.PNUM "
* EXEC SQL DECLARE SNP5 CURSOR FOR
* SELECT DISTINCT STAFF.CITY, PROJ.CITY
* FROM STAFF, WORKS, PROJ
* WHERE STAFF.EMPNUM = WORKS.EMPNUM
* AND WORKS.PNUM = PROJ.PNUM END-EXEC
* EXEC SQL OPEN SNP5;
CALL "SUB11" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 0 TO i
if (SQLCODE = 0 ) then
DISPLAY "STAFF.CITY PROJ.CITY "
END-IF
MOVE 1 TO ii
PERFORM P48 UNTIL ii > 19
* EXEC SQL CLOSE SNP5;
CALL "SUB12" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " i should be 5, i = " , i
if (i = 5 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0082','pass','MCO') END-EXEC
CALL "SUB13" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml020.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0082','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB14" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY " "
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB15" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0082 *******************
******************** BEGIN TEST0083 *******************
DISPLAY " TEST0083 "
DISPLAY " reference X3.135-1989 section 5.20 <from clause>
- " GR"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY "*** Joining a table with itself. "
DISPLAY "*** SELECT FIRST1.EMPNUM, SECOND2.EMPNUM "
DISPLAY "*** FROM STAFF FIRST1, STAFF SECOND2 "
DISPLAY "*** WHERE FIRST1.CITY = SECOND2.CITY "
DISPLAY "*** AND FIRST1.EMPNUM < SECOND2.EMPNUM "
* EXEC SQL DECLARE SNP6 CURSOR FOR
* SELECT FIRST1.EMPNUM, SECOND2.EMPNUM
* FROM STAFF FIRST1, STAFF SECOND2
* WHERE FIRST1.CITY = SECOND2.CITY
* AND FIRST1.EMPNUM < SECOND2.EMPNUM END-EXEC
* EXEC SQL OPEN SNP6;
CALL "SUB16" USING SQLCODE
MOVE SQLCODE TO SQL-COD
MOVE 0 TO i
if (SQLCODE = 0 ) then
DISPLAY "FIRST1.EMPNUM SECOND2.EMPNUM "
END-IF
MOVE 1 TO ii
PERFORM P47 UNTIL ii > 19
* EXEC SQL CLOSE SNP6;
CALL "SUB17" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " i should be 2, i = " , i
if (i = 2 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0083','pass','MCO') END-EXEC
CALL "SUB18" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml020.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0083','fail','MCO') END-EXEC
ADD 1 TO errcnt
CALL "SUB19" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY " "
DISPLAY
"===================================================="
* EXEC SQL COMMIT WORK;
CALL "SUB20" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0083 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN .
* **** Procedures for PERFORM statements
P50.
* EXEC SQL FETCH SNP1 INTO
* :EMPNO1,:EMPNA1,:GRADE1,:SCITY,:PNAME1,:PCITY END-EXEC
CALL "SUB21" USING SQLCODE EMPNO1 EMPNA1 GRADE1 SCITY
PNAME1 PCITY
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0 ) then
COMPUTE i = i + 1
DISPLAY EMPNO1 " " , GRADE1 " " , SCITY " " , PCITY
END-IF
ADD 1 TO ii
.
P49.
* EXEC SQL FETCH SNP3 INTO
* :EMPNO1,:EMPNA1,:GRADE1,:SCITY,:PPNUM,
* :PNAME1,:PTYPE,:BUGET1,:PCITY END-EXEC
CALL "SUB22" USING SQLCODE EMPNO1 EMPNA1 GRADE1 SCITY PPNUM
PNAME1 PTYPE BUGET1 PCITY
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0 ) then
COMPUTE i = i + 1
DISPLAY "STAFF.CITY=" , SCITY " PROJ.CITY=" , PCITY "
- " GRADE1=" , GRADE1
END-IF
ADD 1 TO ii
.
P48.
* EXEC SQL FETCH SNP5 INTO
* :SCITY,:PCITY END-EXEC
CALL "SUB23" USING SQLCODE SCITY PCITY
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0 ) then
COMPUTE i = i + 1
DISPLAY SCITY " " , PCITY
END-IF
ADD 1 TO ii
.
P47.
* EXEC SQL FETCH SNP6 INTO
* :EMPNO1,:PPNUM END-EXEC
CALL "SUB24" USING SQLCODE EMPNO1 PPNUM
MOVE SQLCODE TO SQL-COD
if (SQLCODE = 0 ) then
COMPUTE i = i + 1
DISPLAY EMPNO1 " " , PPNUM
END-IF
ADD 1 TO ii
.
Messung V0.5 in Prozent C=75 H=100 G=88
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland