实验三 事务与存储过程.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三事务与存储过程
一、实验目的
掌握事务操作、游标操作、存储过程使用。二、实验步骤(一准备数据库
1、创建一个名为“ ERP ” +班号 +学号的数据库;
2、建立如下二维表:
客户表
产品表
订单表
订单明细表
(二事务操作
1、计算订单明细中的金额,等于单价乘以数量。
update T_订单明细 set 金额 =单价 *数量
2、将订单明细的金额在原有基础上加 10元,要求放在事务中执行,执行完毕提交事务 begin transaction
update T_订单明细 set 金额 =金额 +10
commit
3、将订单明细的金额在原有基础上减 10元,要求放在事务中执行,执行完毕回滚事务 begin transaction
update T_订单明细 set 金额 =金额 -10
rollback
4、在订单表以及订单明细表中将最后一张订单删除,要求使用事务。
begin transaction
delete from t_订单 where 订单编号 ='R004'
delete from t_订单明细 where 订单编号 ='R004'
commit
(三游标操作
在订单表中有一个总金额字段, 其值等于该订单中所有产品金额的和, 使用游标计算每一订单的总金额。
计算每笔订单总金额
--计算过程 :定义游标,取出每张订单的订单号
--根据订单号汇总明细,代替订单中的金额
--定义订单号、金额合计内存变量
declare @OrderNO varchar (4
declare @OrderSum numeric (12, 2
--定义游标
declare 订单 _Cur cursor for select 订单编号 from T_订单
--打开游标
open 订单 _Cur
--取出第一个记录
fetch next from 订单 Cur into @OrderNO
--循环,分别取每一个记录
while @@fetch_status=0
begin
select @OrderSum=(select (金额 from T_订单明细 =@OrderNO update T_订单 set 总金额 =@OrderSum where 订单编号 =@OrderNO fetch next from 订单 _Cur into @OrderNO
end
--关闭游标
close 订单 _Cur
--清除游标
deallocate 订单 Cur
end
go
(四存储过程
1、将上述 T-SQL 语句存到存储过程中,存储过程名为“ CalOrderSum ” 。
2、编写存储过程,名称为“ StatByCustNO ” ,根据指定的客户编号统计订单笔数及总金额, 将笔数及总金额能返回。
3、参昭上面的例子,新建一个存储过程,名称为“ StatByGoodsNO ” ,根据指定的产品编号统计订货批次总数及订货总数量,其中订货批次是指订单明细中该产品编号的记录个数。 CREATE PROCEDURE StatByBustNO
@CustNO varchar (4, @OrderCount int OUTPUT , @OrderSum numeric (12, 2 OUTPUT
--@CustNO接收客户信息
--@OrderCount订单笔数 OUTPUT 表示返回
--@OrderSum该客户订单总合计 OUTPUT 表示返回
AS
BEGIN
SELECT @OrderCount=(SELECT COUNT (*FROM T_订单 where 客户编号 =
@CustNO
SELECT @OrderCount=(SELECT sum (总金额 FROM T_订单 where 客户编号 = @CustNO
end
go
实验日期:2011-12-9 实验学时:4学时班级:10级计软本
学号:1010711032 姓名:孙微