"ORA-01086: savepoint&…

***Checked for relevance on 30-Jan-2012*** 


Problem Description: 
==================== 
 
In your PL/SQL script, you mark a savepoint, call a stored procedure, and  
then try to ROLLBACK to the savepoint.   When you try to execute the  
ROLLBACK statement, you get the error "ORA-01086: savepoint 'S1'  
never established". 
 
Example: 
 
SQL> CREATE TABLE tab1 (c1 NUMBER, c2 NUMBER); 
 
Table created. 
 
SQL> INSERT INTO tab1 VALUES(1,1); 
 
1 row created. 
 
SQL> COMMIT; 
 
Commit complete. 
 
SQL> SELECT * FROM tab1; 
 
        C1         C2 
---------- ---------- 
          1          
 
SQL>  
SQL> CREATE PROCEDURE proc01 AS 
  2   BEGIN 
  3     INSERT INTO tab1 VALUES(1,1); 
  4     COMMIT; 
  5   END; 
  6  
 
Procedure created. 
 
SQL>  
SQL> BEGIN 
  2     UPDATE tab1 SET c1=10 WHERE c2=1; 
  3     SAVEPOINT s1; 
  4     INSERT INTO tab1 VALUES(2,2); 
  5     proc01; 
  6     ROLLBACK TO s1; 
  7   END; 
  8  
BEGIN 
ERROR at line 1: 
ORA-01086: savepoint 'S1' never established 
ORA-06512: at line 1 
 
SQL>  
SQL> SELECT * FROM tab1; 
 
        C1         C2 
---------- ---------- 
        10          
          2          
          1          
 
 
Additional Search Words: ORA-1086 ORA-6512




Solution Description: 
===================== 
 
The behavior you are seeing is correct.   In the stored procedure, there is  
a COMMIT statement.   COMMIT will erase all savepoints.   You get the  
error ORA-01086 because the savepoint no longer exists.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值