造福系列
ERP课程 实验作业
实验3 业务逻辑的存储过程封装方法
一、实验目的
综合应用前两次的实验结果,利用存储过程封装业务逻辑,体现理解数据与程序相分离的思想,使学生深刻理解该思想的实现方法和好处,为下个综合实验的进行做好准备。
二、实验环境(描述实验的软件、硬件环境)
-
高性能计算机1台
-
数据库系统
-
高级开发语言
三、 实验说明 -
报表功能是ERP系统中非常重要的一个部分,对比高级程序语言,利用存储过程实现报表具有事半功倍的效果,表1为订单主表,企业的管理层根据该表可以做成多种用于决策的报表。
表1 订单主表orderMaster
订单编号 OrderNo Char(12)
客户号 customerNo Char(9)
业务员编号 SaleNo Char(8)
订单金额 Ordersum Numeric
订货日期 Orderdate Datetime
出货日期 Shipdate Datetime
发票号码 InvoiceNo Char(10) -
考虑企业管理的多变性和个性化,在设计与实现ERP系统时,数据与程序的分离非常重要,在利用存储过程和高级编程语言实现报表时,要求高级编程语言中不应出现和实际业务相关的内容,而采用存储过程来封装业务逻辑。
四、实验内容 -
为了体现每一个销售类别对销售总额的贡献,需实现一个报表:将全部的销售额根据金额大小分类,分类区间为500元。类别为0-499.99,500-999.99 … 以此类推,格式如下:
表2 销售区间贡献表
范围下限 销售金额 所占比重(%)
0 2300.00 10
500.00 5200.00 23
1000.00 5600.00 34
… … … -
编写存储过程实现上述报表。
-
通过实验1所用高级程序语言调用上述存储过程,并在相应的数据控件显示报表结果。
-
现需增加新的报表内容,给出各种范围金额的排名,如表3所示。
表3 销售区间贡献表2
范围下限 销售金额 所占比重(%) 排名
0 2300.00 10 3
500.00 5200.00 23 2
1000.00 5600.00 34 1
… … … …
实验步骤
创建订单表
create table orderMaster
(
OrderNo Char(12),
CustomerNo Char(9),
SaleNo Char(8),
Ordersum Numeric,
Orderdate datetime,
Shipdate datetime,
InvoiceNo Char(10)
)
插入数据
insert into orderMaster values(‘001’,‘001’,‘07’,1400,‘2012-9-16’,‘2012-9-20’,‘005’),
(‘002’,‘005’,‘01’,400,‘2012-9-16’,‘2012-9-20’,‘004’),
(‘003’,‘003’,‘03’,1000,‘2012-9-23’,‘2012-9-30’,‘001’),
(‘004’,‘002’,‘04’,200,‘2012-9-18’,‘2012-9-20’,‘003’),
(‘005’,‘004’,‘07’,2000,‘2012-9-19’,‘2012-9-22’,‘007’),
(‘006’,‘001’,‘06’,1700,‘2012-10-16’,‘2012-10-20’,‘006’),
(‘007’,‘002’,‘05’,1700,‘2012-11-16’,‘2012-11-20’,‘002’),
(‘008’,‘001’,‘06’,2100,‘2012-10-17’,‘2012-10-20’,‘006’)
创建储存过程
create procedure sale
as
begin
declare @top numeric
set @top=(select MAX(Ordersum) from orderMaster)
declare @rangeBottom numeric
set @rangeBottom=0
declare @sum numeric
set @sum=0
declare @amount numeric
set @amount=(select SUM(Ordersum) from orderMaster)
declare @sort table(range numeric,saleSum numeric,percentNumber numeric(12,4))
while(@rangeBottom<@top)
begin
set @rangeBottom=@rangeBottom+500
set @sum=(select SUM(Ordersum) from orderMaster where Ordersum<=@rangeBottom and Ordersum>@rangeBottom-500)
if @sum=NULL
begin
set @sum=0
end
insert into @sort values(@rangeBottom,@sum,@sum/@amount100)
end
select range-500 as ‘范围下限’ ,
saleSum as ‘销售金额’,
percentNumber as’所占比重(%)',
(select count()+1 from @sort b where a.saleSum < b.saleSum) as ‘排名’
from @sort a
end
调用sale
exec sale
实验结果