保存点(savepoint)是事务处理过程中的一个标志,和回滚命令(rollback)结合使用,主要的用途是允许用户将某一段处理回滚而不必回滚整个事务,这在pl/sql研发中还是非常有用处的。
下面的例子中,把savepoint标记在insert语句之前,如果这条insert语句试图将重复的数据保存到emp表中的话,将触发执行预先定义的dup_val_on_index例外处理,在这里面的rollback
to do_insert命令将回滚上面的那条insert操作,而不会影响前面的所有操作。
declare
emp_id
emp.empno%type;
begin
update emp set ... where empno = emp_id;
delete from emp where ...
...
savepoint do_insert;
insert into
emp values (emp_id, ...);
exception
when dup_val_on_index then
rollback to
do_insert;
end;
如果你定义了多个savepoint,当你指定回滚到某个savepoint时,那么回滚操作将回滚这个savepoint后面的所有操作(即使后面可能标记了n个savepoint)。例如,在一段处理中
你定义了五个savepoint,从第三个savepoint回滚,后面的第四、第五个标记的操作都将被回滚,如果不使用rollback
to savepoint_name而使用rollback,将会滚整个事务处理。
如果你在递归子程式里面定义了一个savepoint,
如果每一个递归层都设置了savepoint. 此时, 你只能回滚到最近的一个savepoint.
savepoint的声明能在同一个事务处理里面重复定义. 他的作用就是把savepoint从上一个位置转移到目前的位置.
因而,执行回滚也只回滚到最近的savepoint.
下面是个例子:
begin
...
savepoint
my_point;
update emp set ... where empno = emp_id;
...
savepoint my_point; -- move my_point to current point
insert into emp
values (emp_id, ...);
exception
when others then
rollback to
my_point;
end;
另外,oracle没有对每个session里面能使用的savepoint个数做限制.
分享到:
相关推荐
Oracle 10g PL/SQL 是Oracle数据库系统中用于创建和管理存储过程、函数、触发器等数据库对象的编程语言。本教程旨在为初学者提供一个全面的学习平台,同时也为经验丰富的开发者提供参考资料。PL/SQL是Oracle特有的...
需要注意的是,在PL/SQL中只能使用SQL的DML(Data Manipulation Language)部分,而不能直接使用DDL(Data Definition Language)部分,如创建表(CREATE TABLE)等操作。如果需要在PL/SQL中执行DDL操作,则需要通过...
12. **事务管理**:理解COMMIT,ROLLBACK和SAVEPOINT的概念,以及在PL/SQL中如何控制事务。 13. **数据库链接**:跨数据库的通信和数据交换,实现分布式数据库操作。 14. **PL/SQL与Java集成**:通过PL/SQL调用...
10. **性能优化**:教材可能涵盖性能监控和调优技术,如分析SQL语句的执行计划,使用绑定变量,以及如何使用PL/SQL Profiler进行性能分析。 11. **数据库对象的动态SQL**:通过EXECUTE IMMEDIATE和DBMS_SQL包,可以...
- DML操作:INSERT、UPDATE、DELETE语句在PL/SQL中的使用。 - SELECT INTO语句:从查询结果中提取数据到PL/SQL变量。 -游标:使用游标处理多行结果集,进行逐行操作。 3. **异常处理**: - 异常类型:理解预...
8. **并发控制**:PL/SQL支持事务管理和并发控制,如COMMIT、ROLLBACK和SAVEPOINT,保证了数据的一致性。 9. **绑定变量**:使用绑定变量可以提高SQL语句的性能,避免由于重复解析相同的SQL语句而导致的解析开销。 ...
PL/SQL中的SAVEPOINT和DBMS_LOCK包可以帮助你有效地管理并发问题。 9. **性能优化**:通过索引、物化视图、存储过程的优化以及使用绑定变量,你可以显著提升PL/SQL程序的运行效率。了解SQL执行计划和性能分析工具如...
10. **事务管理**:PL/SQL支持事务的概念,包括COMMIT、ROLLBACK和SAVEPOINT,确保数据的一致性和完整性。 在学习PL/SQL的过程中,建议先从基础语法入手,理解如何声明和使用变量,逐步掌握流程控制和异常处理,...
你可以使用`COMMIT`提交事务,`ROLLBACK`回滚事务,或者`SAVEPOINT`设置保存点,以控制数据的持久化和一致性。 通过以上对PL/SQL基础的介绍,你应该已经对其有了初步的认识。继续深入学习,你将能够编写出高效、...
5. **游标**:掌握游标的使用,包括声明、打开、关闭、提取数据等操作,以及如何在PL/SQL中进行动态SQL处理。 6. **复合类型**:了解记录类型和集合类型的创建与使用,这在处理复杂数据结构时非常有用。 7. **...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,SQL(结构化查询语言)是与所有关系数据库进行交互的标准语言,而PL/SQL是Oracle数据库特有的编程语言,它扩展了SQL的功能,使得数据库管理、开发和维护...
PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL语句与过程式编程语言结合在一起,为数据库管理提供了更强大的功能。本教程将全面解析PL/SQL的语法和应用,是学习...
事务是数据库操作的基本单元,可以通过COMMIT提交事务,ROLLBACK回滚事务,或者使用SAVEPOINT设置保存点来管理事务的原子性和一致性。 3.3 **数据检索与游标** 游标用于逐行处理查询结果,提供了一种动态访问数据...
9. **事务管理**:PL/SQL支持COMMIT、ROLLBACK和SAVEPOINT操作,用于确保数据的一致性和完整性。 10. **调试功能**:PL/SQL Developer内置的调试器允许设置断点、查看变量值、单步执行代码,帮助开发者定位和解决...
在PL/SQL块中,可以直接嵌入的数据操作语句包括SELECT、DML(INSERT、UPDATE、DELETE)以及事务控制语句(COMMIT、ROLLBACK、SAVEPOINT)。然而,DDL(CREATE、ALTER、DROP)和DCL(GRANT、REVOKE)语句不能直接嵌入...
3. **变量声明**:在PL/SQL中,变量需要先声明后使用,可以通过`DECLARE`语句进行声明,并可指定初始值。 4. **流程控制**:PL/SQL提供了IF-THEN-ELSIF-ELSE、CASE语句进行条件判断,WHILE和FOR循环用于重复执行...
### PL/SQL 个人笔记详解 #### 一、PL/SQL 块中可...这些语句通常与PL/SQL块结合使用,以便更好地控制数据库操作的过程。例如,在复杂的业务逻辑处理过程中,通过适当地使用这些语句可以确保数据的安全性和一致性。
- PL/SQL可以直接执行DML(INSERT、UPDATE、DELETE)和DDL(CREATE、ALTER、DROP)语句,也可以使用动态SQL执行任意的SQL命令。 通过学习《Oracle PL/SQL程序设计 下 第五版》,开发者能够掌握高级的PL/SQL编程...
PL/SQL支持事务的概念,可以使用`COMMIT`提交事务,`ROLLBACK`回滚事务,以及`SAVEPOINT`设置保存点,确保数据的一致性和完整性。 9. **包(PACKAGE)** 包是PL/SQL的高级特性,它允许将相关的变量、常量、过程和...