IDENTIFICATION DIVISION .
PROGRAM-ID . DML008.
ENVIRONMENT DIVISION .
CONFIGURATION SECTION .
SOURCE-COMPUTER . xyz.
OBJECT-COMPUTER . xyz.
DATA DIVISION .
WORKING-STORAGE SECTION .
* EMBEDDED COBOL (file "DML008.PCO")
****************************************************************
*
* COMMENT SECTION
*
* DATE 1987/08/21 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.
*
* DML008.PCO
* WRITTEN BY: HU YANPING
* TRANSLATED AUTOMATICALLY FROM EMBEDDED C BY CHRIS SCHANZLE
*
* THIS ROUTINE TESTS THE SELECT STATEMENT IN THE LANGUAGE OF
* SQL. THE FORMAT:
* SELECT ( ALL | DISTINCT ) <select list>
* INTO <select target list>
* <table expression>
*
* REFERENCES
* AMERICAN NATIONAL STANDARD database language - SQL
* X3.135-1989
*
* SECTION 8.5 <delete statement: searched>
* SECTION 8.7 <insert statement>
* SECTION 8.10 <select statement>
*
****************************************************************
EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 PNO1 PIC X(3).
01 EMPNO1 PIC X(3).
01 CITY1 PIC X(4).
01 indic1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE .
01 indic2 PIC S9(4) DISPLAY SIGN LEADING SEPARATE .
01 HOURS1 PIC S9(9) DISPLAY SIGN LEADING SEPARATE .
01 i PIC S9(9) 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 SQL-COD PIC S9(9) DISPLAY SIGN LEADING SEPARATE .
01 DISP1 PIC S9(4) DISPLAY SIGN LEADING SEPARATE .
01 DISP2 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
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, dml008.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 TEST0016 *******************
DISPLAY " TEST0016 "
DISPLAY " select more than one record "
DISPLAY "reference X3.135-1989 section 8.10 General Rules 2)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
EXEC SQL SELECT ALL EMPNUM
INTO :EMPNO1
FROM WORKS
WHERE HOURS=12 END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " EMPNO1=" , EMPNO1 " and HOURS=12 "
DISPLAY " SQLCODE=" , SQL-COD " "
DISPLAY "The answer should be SQLCODE < 0."
if (SQLCODE < 0) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0016' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml008.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0016' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0016 *******************
******************** BEGIN TEST0164 *******************
DISPLAY " TEST0164 "
DISPLAY " Make sure without (ALL | DISTINCT) same as ALL "
DISPLAY "reference X3.135-1989 section 8.10 General Rules 1)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
* 8.10 General Rules 1) implied without (ALL | DISTINCT) same
* as ALL. We can also refer to 5.25 GR 2)., 5.19 GR 1). and
* 5.21 GR 2).
EXEC SQL SELECT EMPNUM
INTO :EMPNO1
FROM WORKS
WHERE HOURS=12 END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " EMPNO1=" , EMPNO1 " and HOURS=12 "
DISPLAY " SQLCODE=" , SQL-COD " "
DISPLAY "The answer should be SQLCODE < 0."
if (SQLCODE < 0) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0164' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml008.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0164' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0164 *******************
******************** BEGIN TEST0017 *******************
DISPLAY " TEST0017 "
DISPLAY " select distinct record "
DISPLAY "reference X3.135-1989 section 8.10 General Rules 1)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
EXEC SQL SELECT DISTINCT EMPNUM
INTO :EMPNO1
FROM WORKS
WHERE HOURS=12 END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " EMPNO1=" , EMPNO1 " and HOURS=12 "
DISPLAY " SQLCODE=" , SQL-COD " "
DISPLAY "The answer should be SQLCODE = 0."
if (SQLCODE = 0) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0017' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml008.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0017' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0017 *******************
******************** BEGIN TEST0018 *******************
DISPLAY " TEST0018 "
DISPLAY " select an unexist record "
DISPLAY "reference X3.135-1989 section 8.10 General Rules 2)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
EXEC SQL SELECT EMPNUM,PNUM
INTO :EMPNO1,:PNO1
FROM WORKS
WHERE EMPNUM='E16' END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " SQLCODE=" , SQL-COD " "
DISPLAY "The answer should be SQLCODE = 100."
if (SQLCODE = 100) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0018' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml008.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0018' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "==================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0018 *******************
******************** BEGIN TEST0019 *******************
DISPLAY " TEST0019 "
DISPLAY " select an exist record "
DISPLAY "reference X3.135-1989 section 8.10 General Rules 3)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
EXEC SQL SELECT EMPNUM,HOURS
INTO :EMPNO1,:HOURS1
FROM WORKS
WHERE EMPNUM='E1' AND PNUM='P4' END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " EMPNO1=" , EMPNO1 " and HOURS1=" ,
HOURS1 " "
DISPLAY " SQLCODE=" , SQL-COD " "
DISPLAY "The answer should be SQLCODE = 0 & HOURS1 = 20."
if (SQLCODE = 0 AND HOURS1 = 20) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0019' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml008.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0019' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "=================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0019 *******************
******************** BEGIN TEST0020 *******************
DISPLAY " TEST0020 "
DISPLAY " select a NULL value record "
DISPLAY "reference X3.135-1989 section 8.10 General Rules 8)"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
EXEC SQL INSERT INTO WORKS
VALUES('E18' ,'P18' ,NULL ) END-EXEC
MOVE SQLCODE TO SQL-COD
EXEC SQL SELECT EMPNUM,HOURS
INTO :EMPNO1,:HOURS1:indic2
FROM WORKS
WHERE EMPNUM='E18' AND PNUM='P18' END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE indic2 TO DISP2
EXEC SQL ROLLBACK WORK END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " EMPNO1=" , EMPNO1 " and HOURS1=" ,
HOURS1 " "
DISPLAY " indic2=" , DISP2 " "
DISPLAY "The answer should be indic2 = -1 & EMPNO1 = E18."
if (indic2 = -1 AND EMPNO1 = "E18" ) then
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0020' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " dml008.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0020' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "=================================================="
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0020 *******************
******************** BEGIN TEST0021 *******************
DISPLAY " TEST0021 "
DISPLAY " select different length character values "
DISPLAY "reference X3.135-1989 section 8.10 Gen Rule 8, Case
- " A "
DISPLAY " - - - - - - - - - - - - - - - - - - -"
EXEC SQL SELECT CITY
INTO :CITY1:indic1
FROM STAFF
WHERE EMPNUM='E5' END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE indic1 TO DISP1
DISPLAY " EMPNUM=E5 and CITY1=" , CITY1 " "
DISPLAY " indic1=" , DISP1 " "
DISPLAY "The answer should be indic1 = 15 "
if (indic1 = 15 AND SQLCODE NOT LESS 0) then
DISPLAY " 8.10 select statement GR 8) Case A)"
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0021' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " 8.10 select statement GR 8) Case A)"
DISPLAY " dml008.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0021' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"========================================================"
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
DISPLAY " "
******************** END TEST0021 *******************
******************** BEGIN TEST0165 *******************
DISPLAY " TEST0165 "
DISPLAY " select different length character values "
DISPLAY "Reference X3.135-1989 section 8.10 Gen Rule 8), Case
- " B "
DISPLAY " The answer should be CITY1 = Akro "
DISPLAY " - - - - - - - - - - - - - - - - - - -"
EXEC SQL SELECT CITY
INTO :CITY1:indic1
FROM STAFF
WHERE EMPNUM='E5' END-EXEC
MOVE SQLCODE TO SQL-COD
MOVE indic1 TO DISP1
DISPLAY " EMPNUM=E5 and CITY1=" , CITY1 " "
DISPLAY " indic1=" , DISP1 " "
if (CITY1 = "Akro" ) then
DISPLAY " 8.10 select statement GR 9) Case B)"
DISPLAY " *** pass *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0165' ,'pass' ,'PCO' ) END-EXEC
MOVE SQLCODE TO SQL-COD
else
DISPLAY " 8.10 select statement GR 9) Case B)"
DISPLAY " dml008.pco *** fail *** "
EXEC SQL INSERT INTO TESTREPORT
VALUES('0165' ,'fail' ,'PCO' ) END-EXEC
ADD 1 TO errcnt
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY
"========================================================"
DISPLAY " "
EXEC SQL COMMIT WORK END-EXEC
MOVE SQLCODE TO SQL-COD
******************** END TEST0165 *******************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN .
* **** Procedures for PERFORM statements
Messung V0.5 in Prozent C=87 H=100 G=93
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet am 2026-04-26)
¤
*© Formatika GbR, Deutschland