IDENTIFICATION DIVISION .
PROGRAM-ID . CDR025.
ENVIRONMENT DIVISION .
CONFIGURATION SECTION .
SOURCE-COMPUTER . xyz.
OBJECT-COMPUTER . xyz.
DATA DIVISION .
WORKING-STORAGE SECTION .
* Standard COBOL (file "CDR025.SCO") calling SQL
* procedures in file "CDR025.MCO".
* STANDARD COBOL (file "CDR025.MCO")
****************************************************************
*
* COMMENT SECTION
*
* DATE 1990/09/14 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.
*
* CDR025.SCO
* WRITTEN BY: SUN DAJUN
*
* THIS ROUTINE TESTS THE SCHEMA DEFINITION LANGUAGE FOR SQL.
*
* REFERENCES
* AMERICAN NATIONAL STANDARD database language - SQL
* X3.135-1989
*
* SECTION 6.9 View Definition
*
****************************************************************
* EXEC SQL BEGIN DECLARE SECTION END-EXEC
01 PERCNT PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 FROMDT PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 TODATE PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 UNITZ PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 MYBID1 PIC S9999V9(5 ) DISPLAY SIGN LEADING SEPARATE .
01 MYBID2 PIC S9999V9(5 ) DISPLAY SIGN LEADING SEPARATE .
01 count1 PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 COMMOD PIC X(7 ).
01 MEASUR PIC X(8 ).
01 CURREN PIC X(10 ).
01 PRICE1 PIC S9999V9(5 ) DISPLAY SIGN LEADING SEPARATE .
01 PRICE2 PIC S9999V9(5 ) DISPLAY SIGN LEADING SEPARATE .
* EXEC SQL END DECLARE SECTION END-EXEC
01 flag PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
01 iii PIC S9(9 ) DISPLAY SIGN LEADING SEPARATE .
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 SHOWNUM PIC -(6 ).9 (5 ).
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, cdr025.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
* EXEC SQL DELETE FROM C_TRANSACTION;
CALL "SUB1" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL DELETE FROM COMMODITY;
CALL "SUB2" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL DELETE FROM CURRENCY_TABLE;
CALL "SUB3" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL DELETE FROM MEASURE_TABLE;
CALL "SUB4" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO COMMODITY
* VALUES (17, 'Wheat');
CALL "SUB5" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO COMMODITY
* VALUES (14, 'Saffron');
CALL "SUB6" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO COMMODITY
* VALUES (23, 'Alfalfa');
CALL "SUB7" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO CURRENCY_TABLE
* VALUES ('DOLLAR', 1.00);
CALL "SUB8" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO CURRENCY_TABLE
* VALUES ('POUND', 1.91);
CALL "SUB9" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO CURRENCY_TABLE
* VALUES ('DM', .45);
CALL "SUB10" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO MEASURE_TABLE
* VALUES ('POUND', 1.00);
CALL "SUB11" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO MEASURE_TABLE
* VALUES ('OUNCE', .06);
CALL "SUB12" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO MEASURE_TABLE
* VALUES ('KILO', 2.20);
CALL "SUB13" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO MEASURE_TABLE
* VALUES ('TON', 2000.00);
CALL "SUB14" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO C_TRANSACTION
* VALUES (17, 1411.5, 'DM', 4000, 'KILO', 871212);
CALL "SUB15" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO C_TRANSACTION
* VALUES (17, 7000.0, 'POUND', 100, 'TON', 871012);
CALL "SUB16" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO C_TRANSACTION
* VALUES (23, 20000.0, 'DOLLAR', 40000, 'POUND', 880707)
* ;
CALL "SUB17" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO C_TRANSACTION
* VALUES (14, 10000.0, 'DM', 900, 'OUNCE', 880606);
CALL "SUB18" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL INSERT INTO C_TRANSACTION
* VALUES (14, 10000.0, 'DM', 900, 'OUNCE', 880707);
CALL "SUB19" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL COMMIT WORK;
CALL "SUB20" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** BEGIN TEST0402 *******************
DISPLAY " TEST0402 "
DISPLAY " Computed GROUP BY view over referencing tables"
DISPLAY " Reference X3.135-89 section 6.9 <view def.>"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY " ***"
DISPLAY " CREATE VIEW DOLLARS_PER_POUND"
DISPLAY " (COMMODITY, UNIT_PRICE, FROM_DATE,
- " TO_DATE)"
DISPLAY " AS SELECT COMMODITY.C_NAME, "
DISPLAY " SUM(TOT_PRICE * DOLLAR_EQUIV) / SUM(UNITS
- " * POUND_EQUIV),"
DISPLAY " MIN(T_DATE), MAX(T_DATE)"
DISPLAY " FROM C_TRANSACTION, COMMODITY,
- " CURRENCY_TABLE, MEASURE_TABLE"
DISPLAY " WHERE C_TRANSACTION.COMMOD_NO =
- " COMMODITY.C_NUM"
DISPLAY " AND C_TRANSACTION.CURRENCY =
- " CURRENCY_TABLE.CURRENCY"
DISPLAY " AND C_TRANSACTION.MEASURE =
- " MEASURE_TABLE.MEASURE"
DISPLAY " GROUP BY COMMODITY.C_NAME"
DISPLAY " HAVING SUM(TOT_PRICE * DOLLAR_EQUIV) >
- " 10000;"
DISPLAY " "
MOVE 0 TO count1
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM C_TRANSACTION WHERE COMMOD_NO = 17;
CALL "SUB21" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
MOVE 1 TO flag
MOVE 0 .0 TO PRICE1
MOVE 0 TO FROMDT
MOVE 0 TO TODATE
* EXEC SQL DECLARE CCC CURSOR FOR
* SELECT UNIT_PRICE, FROM_DATE, TO_DATE, COMMODITY
* FROM DOLLARS_PER_POUND
* ORDER BY COMMODITY DESC END-EXEC
* EXEC SQL OPEN CCC;
CALL "SUB22" USING SQLCODE
MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH CCC
* INTO :PRICE1, :FROMDT, :TODATE, :COMMOD;
CALL "SUB23" USING SQLCODE PRICE1 FROMDT TODATE COMMOD
MOVE SQLCODE TO SQL-COD
* EXEC SQL CLOSE CCC;
CALL "SUB24" USING SQLCODE
MOVE SQLCODE TO SQL-COD
if (FROMDT NOT = 871012 OR PRICE1 < 0 .06 OR PRICE1
> 0 .07 ) then
MOVE 0 TO flag
END-IF
if (TODATE NOT = 871212 ) then
MOVE 0 TO flag
END-IF
DISPLAY " The correct answer is approximately:"
DISPLAY " count1 = 2 PRICE1 = .067"
DISPLAY " FROMDT = 871012, TODATE = 871212"
MOVE PRICE1 TO SHOWNUM
DISPLAY " Your answer is:"
DISPLAY " count1 = " , count1 " PRICE1 = " , SHOWNUM
DISPLAY " FROMDT = " , FROMDT " TODATE = " , TODATE
if ( count1 = 2 AND flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0402','pass','MCO');
CALL "SUB25" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " cdr025.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0402','fail','MCO');
ADD 1 TO errcnt
CALL "SUB26" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "================================================"
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB27" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0402 ********************
******************** BEGIN TEST0403 *******************
DISPLAY " OPTIONAL TEST0403 "
DISPLAY " View on computed GROUP BY view with join"
DISPLAY " Reference X3.135-89 section 6.9 <view def.>"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY " ***"
DISPLAY " CREATE VIEW COST_PER_UNIT"
DISPLAY " (COMMODITY, UNIT_PRICE, CURRENCY, MEASURE"
DISPLAY " AS SELECT COMMODITY, UNIT_PRICE *
- " POUND_EQUIV / DOLLAR_EQUIV"
DISPLAY " FROM DOLLARS_PER_POUND,
- " CURRENCY_TABLE,"
DISPLAY " MEASURE_TABLE;"
DISPLAY " "
MOVE 0 TO count1
* EXEC SQL SELECT COUNT(*) INTO :count1
* FROM COST_PER_UNIT;
CALL "SUB28" USING SQLCODE count1
MOVE SQLCODE TO SQL-COD
* EXEC SQL DECLARE DDD CURSOR FOR
* SELECT CURRENCY, MEASURE, UNIT_PRICE, COMMODITY
* FROM COST_PER_UNIT END-EXEC
* EXEC SQL OPEN DDD;
CALL "SUB29" USING SQLCODE
MOVE SQLCODE TO SQL-COD
*Find the unit price for Alfalfa in DM per KILO
MOVE 1 TO iii
PERFORM P50 UNTIL iii > 24
DISPLAY " The correct answer is approximately:"
DISPLAY " count1 = 24 PRICE1 = 2.444"
MOVE PRICE1 TO SHOWNUM
DISPLAY " Your answer is:"
DISPLAY " count1 = " , count1 " PRICE1 = " , SHOWNUM
if ( count1 = 24 AND PRICE1 > 2 .42 AND PRICE1 <
2 .47 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0403','pass','MCO');
CALL "SUB30" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " cdr025.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0403','fail','MCO');
ADD 1 TO errcnt
CALL "SUB31" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "================================================"
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB32" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0403 ********************
******************** BEGIN TEST0413 *******************
DISPLAY " TEST0413 "
DISPLAY " Computed SELECT from computed VIEW"
DISPLAY " Reference X3.135-89 section 6.9 <view def.>"
DISPLAY " - - - - - - - - - - - - - - - - - - -"
DISPLAY " "
MOVE 1 TO flag
*Bid dollars to buy 700 pounds of alfalfa at 7% over average
MOVE 7 TO PERCNT
MOVE 700 TO UNITZ
MOVE "XXXXXXX" TO COMMOD
* EXEC SQL DECLARE EEE CURSOR FOR
* SELECT (100 + :PERCNT) * UNIT_PRICE * :UNITZ / 100,
* COMMODITY
* FROM DOLLARS_PER_POUND
* ORDER BY COMMODITY END-EXEC
* EXEC SQL OPEN EEE;
CALL "SUB33" USING SQLCODE PERCNT UNITZ
MOVE SQLCODE TO SQL-COD
* EXEC SQL FETCH EEE INTO :MYBID1, :COMMOD;
CALL "SUB34" USING SQLCODE MYBID1 COMMOD
MOVE SQLCODE TO SQL-COD
* EXEC SQL CLOSE EEE;
CALL "SUB35" USING SQLCODE
MOVE SQLCODE TO SQL-COD
DISPLAY " The correct answer is approximately:"
DISPLAY " MYBID1 = 374.5"
MOVE MYBID1 TO SHOWNUM
DISPLAY " Your answer is:"
DISPLAY " MYBID1 = " , SHOWNUM
if (MYBID1 < 374 .4 OR MYBID1 > 374 .6 OR COMMOD NOT
= "Alfalfa" ) then
MOVE 0 TO flag
END-IF
if (flag = 1 ) then
DISPLAY " *** pass *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0413','pass','MCO');
CALL "SUB39" USING SQLCODE
MOVE SQLCODE TO SQL-COD
else
DISPLAY " cdr025.sco *** fail *** "
* EXEC SQL INSERT INTO TESTREPORT
* VALUES('0413','fail','MCO');
ADD 1 TO errcnt
CALL "SUB40" USING SQLCODE
MOVE SQLCODE TO SQL-COD
END-IF
DISPLAY "================================================"
DISPLAY " "
* EXEC SQL COMMIT WORK;
CALL "SUB41" USING SQLCODE
MOVE SQLCODE TO SQL-COD
******************** END TEST0413 ********************
**** TESTER MAY CHOOSE TO INSERT CODE FOR errcnt > 0
STOP RUN .
* **** Procedures for PERFORM statements
P50.
MOVE 1 TO flag
* EXEC SQL FETCH DDD
* INTO :CURREN, :MEASUR, :PRICE2, :COMMOD;
CALL "SUB42" USING SQLCODE CURREN MEASUR PRICE2 COMMOD
MOVE SQLCODE TO SQL-COD
if (CURREN NOT = "DM" ) then
MOVE 0 TO flag
END-IF
if (MEASUR NOT = "KILO" ) then
MOVE 0 TO flag
END-IF
if (COMMOD NOT = "Alfalfa" ) then
MOVE 0 TO flag
END-IF
if (flag = 1 ) then
MOVE PRICE2 TO PRICE1
END-IF
ADD 1 TO iii
.
Messung V0.5 in Prozent C=74 H=100 G=87
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-09)
¤
*© Formatika GbR, Deutschland