统计每个商品每个月的总销售金额
--创建函数
--传入月份参数,及商品编号分组,返回各个商品每个月的销售总量-------------------------------
CREATE OR REPLACE FUNCTION fu(fdate in NUMBER,fcid in INT)
RETURN number
AS
fcount INT;
fprice commodity_list.price%type;
BEGIN
SELECT count(*) into fcount
FROM goods_order
WHERE to_char(sala_date,'mm')= fdate AND cid = fcid ;
SELECT nvl(price,0) into fprice FROM commodity_list where cid=fcid ;
RETURN fcount * fprice;
END;
--------------------------------------------------------------------------------------------
DECLARE
---创建游标
CURSOR m_cr IS SELECT to_char(sala_date,'mm'),cid
FROM goods_order GROUP BY to_char(sala_date,'mm'),cid order by cid;
--申明变量接受游标中的月份和商品标号
fdate number;
fcid INT;
cmany number;
BEGIN
--打开游标
OPEN m_cr;
--循环获取每个商品
loop
fetch m_cr INTO fdate,fcid;
exit when m_cr%notfound;
--循环调用函数获取总金额
cmany:= fu(fdate,fcid);
dbms_output.put_line('商品编号:'||fcid||' 月份:'||fdate||' 销售总金额'||cmany||'元');
end loop;
--关闭
close m_cr;
END;
/
--商品表
--商品编号 商品名称 商品的价格 商品的库存
set serveroutput on;
CREATE TABLE commodity_list(
cid INT,
cname VARCHAR(10),
price NUMBER,
inventory int
);
--商品订单表
--商品编号 商品的销量 售出日期
CREATE TABLE goods_order(
cid INT,
salas NUMBER,
sala_date date
);
查询结果:
PL/SQL 过程已成功完成。
商品编号:1 月份:3 销售总金额171元
商品编号:2 月份:4 销售总金额171元
商品编号:3 月份:4 销售总金额171元
商品编号:4 月份:3 销售总金额228元
商品编号:5 月份:7 销售总金额228元
商品编号:6 月份:8 销售总金额228元
商品编号:7 月份:7 销售总金额285元