数据库实验(六)——转账事务

转账事务与存储过程

一、实验目的:

1.掌握事务操作

2.掌握存储过程的应用

 

二、实验内容:

1、先建立数据环境(帐户表)

create table 帐户表
(帐户编号 char(4) primary key,
帐户名 char(4),
金额 int)
go

insert 帐户表 values('A','A',19800);
insert 帐户表 values('B','B',5000);
insert 帐户表 values('C','C',2000);
insert 帐户表 values('D','D',9000);
go


 

 

 

2、转账事务与存储过程的编写

 
if exists(select name from sysobjects
             where name = 'zhuanzhang' and type='p')
drop procedure zhuanzhang 
go    

--建立一个带有参数的转账存储过程
-- @zhOUT 转出帐户帐号 
-- @zhIN 转入帐户帐号
--@JinE  金额
create procedure zhuanzhang
@zhOUT varchar(8),@zhIN varchar(8),@JinE int
as
--转账事务
begin transaction
--记录点
save transaction befor_zhuanzhang
--帐户转出 一定金额
declare @xianYou int
select @xianyou=金额 from 帐户表 
where 帐户编号=@zhOUT
if @xianyou<@JinE
begin
 rollback transaction befor_zhuanzhang
    print '金额不足!'
    --return
end
else
begin
 update 帐户表 set 金额=金额-@JinE
 where 帐户编号=@zhOUT
 --帐户转入 一定金额
 update 帐户表 set 金额=金额+@JinE
 where 帐户编号=@zhIN
 if @@Error<>0 or @@rowcount=0
 begin
  rollback transaction befor_zhuanzhang
  print '转账出错错误。'
  --return
 end
 else
 begin
  print '帐户'+@zhOUT+'转出'+convert(varchar(32),@JinE)+'元,到帐户'+@zhIN+'。'
 end;
end
commit transaction 


 

3.测试数据(执行存储过程zhuanzhang)

execute zhuanzhang 'A','B',5000
execute zhuanzhang 'C','D',5000


 写出以上语句依次执行的实验结果。

 

posted @ 2007-12-19 09:41  涛涌四海  阅读(227)  评论(0编辑  收藏  举报