Oracle基础 存储过程和事务
2015-01-13 11:50
375 查看
一、事务和存储过程
在存储过程中如何使用事务。当需要在存储过程中同时执行多条添加、修改、删除SQL语句时,为了保证数据完整性,我们需要使用事务。使用方式和在PL-SQL中非常相似,但也有一些区别。
调用事务
二、自主事务处理:
自主事务:是由零一个事务启动的独立事务处理。自主事务处理可以暂停主事务处理,也就是处理自己存储过程内部的事务,当自主事务处理完之后会恢复主事务处理。
PRAGMA AUTONOMOUS_TRANSACTION; --定义为自主事务,不受其他事务提交,回滚的影响
例:
调用主事务:
总结自主事务:
1、自主事务处理结果的变化不依赖于主事务处理的状态或最终配置。
2、自主事务处理提交或回滚时,不影响主事务处理的结果。
3、自主事务提交一旦提交,该自主事务处理结果的变化对于其他事务处理就是课件的。这意味着,用于可以访问已更新的信息,无需等待主事务处理提交。
4、自主事务处理可以启动其它自主事务处理。
在存储过程中如何使用事务。当需要在存储过程中同时执行多条添加、修改、删除SQL语句时,为了保证数据完整性,我们需要使用事务。使用方式和在PL-SQL中非常相似,但也有一些区别。
--带事务的存储过程 CREATE OR REPLACE PROCEDURE Account_zhuanzhang(fromuser NUMBER,touser NUMBER,money NUMBER) IS BEGIN UPDATE account SET balance = balance - money WHERE id = fromuser; UPDATE account SET balance = balance + money WHERE id = touser; COMMIT; EXCEPTION WHEN OTHERS THEN dbms_output.put_line('转账失败'); ROLLBACK; END Account_zhuanzhang;
调用事务
SELECT * FROM ACCOUNT; DECLARE fromuser NUMBER := 1; touser NUMBER := 2; money NUMBER := &m; BEGIN account_zhuanzhang(fromuser,touser,money); END;
二、自主事务处理:
自主事务:是由零一个事务启动的独立事务处理。自主事务处理可以暂停主事务处理,也就是处理自己存储过程内部的事务,当自主事务处理完之后会恢复主事务处理。
PRAGMA AUTONOMOUS_TRANSACTION; --定义为自主事务,不受其他事务提交,回滚的影响
例:
--自主事务:带参数添加部门信息,最后使用了回滚 CREATE OR REPLACE PROCEDURE PRO_DEPT_ADD(DEPTNO NUMBER,DNAME VARCHAR2,LOC VARCHAR2) AS PRAGMA AUTONOMOUS_TRANSACTION; --定义为自主事务,不受其他事务提交,回滚影响 BEGIN INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (DEPTNO, DNAME, LOC); ROLLBACK; --自主事务回滚操作,不影响主事务。 END;
--主事务,添加部门信息,并调用带参数的自主事务,自己本身提交 CREATE OR REPLACE PROCEDURE PRO_DEPT_ADD2 AS BEGIN INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (60, 'test1', 'test2'); PRO_DEPT_ADD(70, 'test', 'test'); --如果调用的事务回滚,如果不是自主事务当前存储过程中插入数据也要一起回滚。但是添加了自主事务后,自主事务提交内容不会影响到当前存储过程 COMMIT; END;
调用主事务:
BEGIN pro_dept_add2(); --调用完毕后,为60的部门插入成功,但是为70的部门信息回滚了。只有一条插入成功! END;
总结自主事务:
1、自主事务处理结果的变化不依赖于主事务处理的状态或最终配置。
2、自主事务处理提交或回滚时,不影响主事务处理的结果。
3、自主事务提交一旦提交,该自主事务处理结果的变化对于其他事务处理就是课件的。这意味着,用于可以访问已更新的信息,无需等待主事务处理提交。
4、自主事务处理可以启动其它自主事务处理。
相关文章推荐
- oracle 存储过程基础知识1
- oracle存储过程中的事务【转】
- MSSQLServer基础07(事务,存储过程,分页的存储过程,触发器)
- Oracle - 存储过程异常处理事务分析
- Oracle存储过程基本语法与基础教程(简明清楚且附实例)
- oracle 存储过程基础知识3
- 数据库基础(数据库事务及存储过程的小练习)
- Oracle基础知识3----存储过程、存储函数、out参数、包
- Oracle存储过程基本语法和基础教程
- oracle 存储过程基础
- oracle 存储过程基础写法
- Oracle学习总结(一)存储过程基础
- ORACLE 有关存储过程的一些基础知识
- MSSQLServer基础07(事务,存储过程,分页的存储过程,触发器)
- oracle 存储过程基础
- oracle事务及存储过程实例
- oracle 父存储过程调用子过程的事务问题
- oracle 存储过程自治事务(Autonomy transaction)
- mysql基础三(视图、触发器、函数、存储过程、事务、防注入)
- oracle存储过程基础语法+提升+例子总结