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

来源:互联网 发布:淘宝开店实名认证在哪 编辑:程序博客网 时间:2024/04/29 06:43

 

事务与序列实现的自增id

 

1.     创建序列:

create sequence seq_add

minvalue 8000

 

2.     创建触发器:

createorreplacetrigger trigger_seq

beforeinserton scott.emp

foreachrow

begin

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

  select seq_add.nextvalinto :new.empnofrom 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,pinpnvarchar2,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,pinpnvarchar2,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;

原创粉丝点击