Oracle数据库事务与序列实现的自增id

 

事务与序列实现的自增id

1.     创建序列:

create sequence seq_add

minvalue 8000

2.     创建触发器:

createorreplacetrigger trigger_seq

beforeinserton scott.emp

foreachrow

扫描二维码关注公众号,回复: 1710092 查看本文章

begin

  --使用序列添加id到更新的一行

  select seq_add.nextvalinto :new.empno from dual;

end;

3.     添加数据:insertinto scott.emp(ename)values('zxxxx')

4.     查询:select * from scott.emp

 

Ø 事务

 

²  事务的四大特性

原子性

一致性

隔离性

持久性

 

特点:要么就是全部执行成功,要么就是全部不执行

 

 

保存点

Savapoint 保存点名称

savepointa;

恢复到保存点

       Rollback  to 保存点名称

事务转账

createorreplaceprocedureproc_sal(pmoneyint)

as

begin

  --转出

  update scott.empsetsal=sal-pmoneywhere empno=7839;

  --转入

  update scott.empsetsal=sal+pmoneywhere empno=7788;

  --提交(这样直接提交很危险)

  commit;

end;

 

 

--调用

begin

       proc_sal(1000);

end;

 

 

 

异常处理

 

 事务记录测试号

createorreplaceprocedure proc_sal(pmoneyint,pinp nvarchar2,poutpnvarchar2)

as

numerror int:=0;

begin

  --转出

  updatescott.empset sal=sal-pmoneywhere ename=pinp;

  --错误号

 numerror:=numerror+sql%rowcount;

 

  --转入

  updatescott.empset sal=sal+pmoneywhere ename=poutp;

    --错误号

 numerror:=numerror+sql%rowcount;

 

  ifnumerror<2then

dbms_output.put_line('转账失败');

--回滚

    rollback;

  else

    --提交(这样直接提交很危险)

    commit;

  endif;

end;

 

²  事务异常处理

createorreplaceprocedure proc_sal(pmoneyint,pinp nvarchar2,poutpnvarchar2)

as

numerror int:=0;

begin

  --转出

  updatescott.empset sal=sal-pmoneywhere ename=pinp;

  --错误号

 numerror:=numerror+sql%rowcount;

 

  --转入

  updatescott.empset sal=sal+pmoneywhere ename=poutp;

    --错误号

 numerror:=numerror+sql%rowcount;

 

  ifnumerror<2then

   dbms_output.put_line('转账失败');

    rollback;

  else

    --提交(这样直接提交很危险)

    commit;

  endif;

 

  exception--异常处理

      whenothersthen

      begin

       dbms_output.put_line('转账过程中出现异常');

        rollback;--回滚

      end;

end;

猜你喜欢

转载自blog.csdn.net/weixin_39550799/article/details/78820095