从账户一的余额中转100到账户二的余额中去,如果账户二不存在或账户一中的余额不足100则整笔交易回滚
当前位置: 数据库>oracle
Oracle基本事务和ForAll执行批量DML练习
来源: 互联网 发布时间:2017-04-07
本文导语: 基本事务的使用: 从账户一的余额中转100到账户二的余额中去,如果账户二不存在或账户一中的余额不足100则整笔交易回滚 Sql代码 select * from account; -- 创建一张账户表 create table account( -- 账户ID ...
基本事务的使用:
从账户一的余额中转100到账户二的余额中去,如果账户二不存在或账户一中的余额不足100则整笔交易回滚
select * from account;
-- 创建一张账户表
create table account(
-- 账户ID
id number(3) not null,
-- 账户名称
name varchar2(50) not null,
-- 账户余额
balance number(8,2) not null,
-- 开启时间
btime date not null
)
-- 插入数据
insert into account(id,name,balance,btime) values(1,'张三',2000.23,to_date('2008-02-12','yyyy-mm-dd'));
insert into account(id,name,balance,btime) values(2,'李四',530,to_date('2008-10-03','yyyy-mm-dd'));
insert into account(id,name,balance,btime) values(3,'王五',1620.2,to_date('2007-08-20','yyyy-mm-dd'));
insert into account(id,name,balance,btime) values(4,'小强',910.9,to_date('2009-01-23','yyyy-mm-dd'));
insert into account(id,name,balance,btime) values(5,'小周',8700,to_date('2006-09-10','yyyy-mm-dd'));
declare
-- 临时保存账户一的余额总数
v_balance account.balance%type;
begin
update account set balance = balance - 100 where name = '&转出账号:' returning balance into v_balance;
if sql%notfound then
raise_application_error(-20001,'转出账号 不存在!');
end if;
if v_balance
从账户一的余额中转100到账户二的余额中去,如果账户二不存在或账户一中的余额不足100则整笔交易回滚