oracle课堂收录-过程中的事务处理

用户可以使用COMMIT语句将事务中的所有操作‘保存’到数据库中。

如果用户需要撤销所有的操作,则可以使用ROLLBACK语句回退事物中未提交的操作。


举个栗子

(1)以用户scott身份连接到数据库,并建立两个表

C:\Documents and Settings\Administrator>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 10月 19 20:25:42 2015

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect scott/*******
已连接。
SQL> create table temp(n number);

表已创建。

SQL> create table log_table(
  2     username varchar2(20),
  3     password varchar2(4000)
  4  );

表已创建。
(2)建立一个存储过程INSERT_INTO_LOG,用于向表LOG_TABLE添加记录。

SQL> create or replace procedure insert_into_log(msg_param varchar2) is
  2     pragma autonomous_transaction;
  3  begin
  4     insert into log_table(username,password)
  5     values(user,msg_param);
  6     commit;
  7  end insert_into_log;
  8  /

(3)在匿名程序块中调用INSERT_INTO_LOG过程

SQL> begin
  2  insert_into_log('添加数据到TEMP表之前调用');
  3  insert into temp
  4  values(1);
  5  insert_into_log('添加数据到TEMP表之后调用');
  6  rollback;
  7  end;
  8  /

PL/SQL 过程已成功完成。

(4)查看表中的数据

SQL> select * from log_table;

USERNAME
--------------------
PASSWORD
-----------------------------------------

SCOTT
添加数据到TEMP表之前调用

SCOTT
添加数据到TEMP表之后调用

从结果中可以看出,在temp表中并没有数据,说明rollback已经撤销了insert语句,而log_table中包含了两条记录,说明过程中的子事务已经被提交,即过程中的子事务和父事务可以互相互不干涉的进行。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值