* 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 * ****************************************************************
******************** BEGIN TEST0402 ******************* DISPLAY" TEST0402 " DISPLAY" Computed GROUP BY view over referencing tables" DISPLAY" Reference X3.135-89 section 6.9 " 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"
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 " 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"
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 STOPRUN.
* **** 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
.
¤ Dauer der Verarbeitung: 0.17 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.