11事务及异常处理

发布 2022-06-26 17:59:28 阅读 8460

事务及异常处理实践。

一、数据库设计说明。

create database bank

gouse bank

gocreate table bank--帐户信息表(bank)存放帐户的信息。

customername varchar(30),-客户姓名。

pwd char(8) not null,--交易密码。

cardid char(9) primary key,--卡号。

currentmoney money check(currentmoney>=1),-存款余额。

retime datetime default(getdate())开户时间。

gocreate table transinfo--交易信息表(transinfo)存放每次的交易信息。

cardid char(9) references bank(cardid),-卡号。

transtype char(4),-交易类型,如'存款','取现','转帐'等。

transdate datetime default getdate(),交易时间。

transmoney money check(transmoney>=100)--交易金额。

goinsert into bank values('张三','123','10011001',1000,default)

insert into bank values('李四','321', 10011002',1,default)

insert into transinfo values('10011001','存款',getdate(),200)

insert into transinfo values('10011002','取现',getdate(),400)

二、实践要求。

1、创建存储过程p_cashin

【说明】该存储过程用于实现存款功能,具体实现如下:

向transinfo表中添加一条存款记录,修改帐户余额。

输出存款完成后帐户的余额。

create proc p_cashin

cardid char(9),trnasmoney money

asinsert into transinfo values(@cardid,'存款',getdate(),trnasmoney)

update bank set currentmoney=currentmoney+@trnasmoney where cardid = cardid

return (select currentmoney from bank where cardid=@cardid)

godeclare @balance money

exec @balance = p_cashin '10011001',50

select @balance

实践要求】修改以上存储过程,保证账户记录的添加及账户余额的更新要么同时成功要。

么同时失败。(通过@@error捕获错误)—参照ppt

-测试执行,查看是否实现正确的事务机制。

2、创建存储过程 p_openaccount

说明】该存储过程用于实现开户功能,添加用户信息,如果卡号已被使用返回-1,添加成功返回1

create proc p_openaccount

customername varchar(30),pwd char(8),cardid char(9),currentmoney money

asif exists(select cardid from bank where cardid=@cardid)

return -1

elsebegin

insert into bank(customername,pwd,cardid,currentmoney)

values(@customername,@pwd,@cardid,@currentmoney)

return 1endgo

-执行存储过程,测试预期结果。

declare @result int

exec @result=p_openaccount 'lcy','123','10011003',10

select @result

实践要求】通过begin try捕获insert语句关于当前余额不能少于1元的限制,如果没有错误返回1,如果获取错误,返回状态-2,报告前台错误信息“账户余额不能低于1元”。

-测试执行,查看是否实现错误捕获。

3、创建存储过程p_cashtrans

作用】该存储过程用于实现转账功能。具体操作如下。

向transinfo表中添加一条转出记录和一条转入记录。

修改相关账户的余额,并输出转账完成后的帐户余额。

注意:如果转账金额超过卡余额,返回状态-1,操作成功返回1

create proc p_cashtrans

cardid_out char(9),cardid_in char(9),cash money,endcash money output

asif((select currentmoney from bank where cardid=@cardid_out)<@cash)

return -1

elsebegin

insert into transinfo values(@cardid_out,'取款',getdate(),cash)

update bank set currentmoney=currentmoney-@cash where cardid=@cardid_out

insert into transinfo values(@cardid_in,'存款',getdate(),cash)

update bank set currentmoney=currentmoney+@cash where cardid=@cardid_in

set @endcash=(select currentmoney from bank where cardid=@cardid_out)

return 1endgo

declare @money money,@stat int

exec @stat=p_cashtrans '10011001','10011002',800,@money output

select @stat ,@money 余额。

实践要求】修改以上存储过程,保证转帐后账户的一致性,及多语句要么一起成功,要么一起失败,如果失败,抛出自定义错误信息”转账失败”,严重级别16,状态1 同时存储过程返回状态-2

通过begin try捕获错误)

-测试执行,查看是否实现正确的事务机制。

前台页面要实施批量删除,前台程序员读取的是批量删除的记录号,并连接成字符串,要求数据人员编写一存储过程,实现批量删除。

create table product

id int identity,pname varchar(20)

goinsert into product

select '绿箭口香糖'

union all

select '可比克薯片'

union all

select '盐津梅条'

union all

select '丹夫华夫饼'

union all

select '好丽友q帝巧克力派'

union all

select '好丽友蛋黄派'

举例:前台读取待删除记录号,连接成字符串(1,3,5),现需要数据库设计人员编写一存储过程,分解字符串,删除相应的记录。

-注意,批量删除如果某一记录删除失败,其他删除动作都应该失败。

实验11与异常处理

一 实验目的。1 理解函数模板和类模板的概念。2 会编写包含函数模板和类模板的程序。3 正确理解c 的异常处理机制。4 掌握异常处理的编程特点。5 了解异常分类层次,常见系统异常。6 学习自定义异常的定义及方法,异常的抛出与处理。二 实验内容。1 编写一个求绝对值的函数模板,并测试。2 请将的冒泡排...

异常处理作业答案

评分标准 1 编程题正确,选择题错2题以内可评a,3题以内可评b,4题以内c,5题以内d,其余e。2 编程题基本不正确,选择题错2题以内可评b,3题以内可评c,4题以内d,其余e。选择题。1.bce 2.btry catch finally三个 块中变量的作用域为 块内部,分别独立而不能相互访问。因...

异常处理作业答案

评分标准 1 编程题正确,选择题错2题以内可评a,3题以内可评b,4题以内c,5题以内d,其余e。2 编程题基本不正确,选择题错2题以内可评b,3题以内可评c,4题以内d,其余e。选择题。bce btry catch finally三个 块中变量的作用域为 块内部,分别独立而不能相互访问。因此,变量...