【发布时间】:2017-06-15 12:32:15
【问题描述】:
我已经创建了这个程序:
SET SERVEROUTPUT ON;
CREATE OR REPLACE PROCEDURE sales_period (
purchdate1 IN DATE,
purchdate2 IN DATE
)
IS
CURSOR purchcur IS
SELECT purchases.purchdate, max(purchases.purchprice) max1,
min(purchases.purchprice) min1, avg(purchases.purchprice) avg1
FROM purchases
WHERE purchases.purchdate BETWEEN sales_period.purchdate1 AND
sales_period.purchdate2
group by purchases.purchdate;
purchrow purchcur%ROWTYPE;
e_foreign_key_error EXCEPTION;
PRAGMA EXCEPTION_INIT (e_foreign_key_error, -2291);
BEGIN
OPEN purchcur;
LOOP
FETCH purchcur INTO purchrow;
DBMS_OUTPUT.PUT_LINE('Sales report: ');
DBMS_OUTPUT.PUT_LINE('Date sold: ' || purchrow.purchdate);
DBMS_OUTPUT.PUT_LINE('Max saleprice: ' || purchrow.max1);
DBMS_OUTPUT.PUT_LINE('Avg saleprice: ' || purchrow.avg1);
DBMS_OUTPUT.PUT_LINE('Min saleprice: ' || purchrow.min1);
EXIT WHEN purchcur%NOTFOUND;
END LOOP;
EXCEPTION
WHEN e_foreign_key_error THEN
DBMS_OUTPUT.PUT_LINE('no existing field in parent table');
CLOSE purchcur;
END;
/
我要做的是输入两个日期,然后打印出销售报告,即该期间(输入的两个日期之间)的最高、平均和最低价格。所以,问题是我所做的是这样做的:
SQL> exec sales_period('1-Jun-15', '30-Aug-15');
Sales report:
Date sold: 03-JUL-15
Max saleprice: 1600
Avg saleprice: 1600
Min saleprice: 1600
Sales report:
Date sold: 05-JUL-15
Max saleprice: 5000
Avg saleprice: 5000
Min saleprice: 5000
Sales report:
Date sold: 10-AUG-15
Max saleprice: 3000
Avg saleprice: 3000
Min saleprice: 3000
Sales report:
Date sold: 02-JUN-15
Max saleprice: 2000
Avg saleprice: 2000
Min saleprice: 2000
Sales report:
Date sold: 07-JUL-15
Max saleprice: 1500
Avg saleprice: 1500
Min saleprice: 1500
我想要它做的是获取这些日期之间的所有价格,并计算出最大值、最小值和平均值并只显示一次。就像,让我们说......
01-Jul-2015 售价 1000
02-Jul-2015 售价为 1300
28-Jul-2015 售价 1500
我愿意exec sales_period('1-Jul-15', '30-Jul-15');
我希望它像这样打印出来:
Max: 1500, min: 1000, avg: 1300
不像我运行它时所做的那样 - 它在每个日期都执行它,并且没有得到最小值、最大值和平均值总体。我希望它得到整体的最小值、最大值和平均值。
我希望得到一些帮助! - 谢谢!!
【问题讨论】:
标签: sql oracle stored-procedures max min