oracle1002,一个有趣的错误ORA-1002

本文通过示例解释了在PL/SQL中遇到ORA-1002错误的原因,该错误与在UPDATE语句后紧跟着FOR循环中的ROLLBACK有关。问题在于ROLLBACK操作影响了循环游标状态。在Oracle 10g及更高版本中,此问题得到了部分解决,但通过使用用户声明并FETCH的游标或使用RAISE_APPLICATION_ERROR来处理异常,可以更妥善地避免此类错误。
摘要由CSDN通过智能技术生成

今天同事发现了一个错误,错误号为ORA-1002。

为了更好展示这个问题,构造了下面的代码了重现问题:

SQL> CREATE TABLE T (ID NUMBER);

表已创建。

SQL> CREATE TABLE T1 (ID NUMBER);

表已创建。

SQL> INSERT INTO T VALUES (1);

已创建1行。

SQL> INSERT INTO T1 SELECT ROWNUM FROM TAB WHERE ROWNUM < 4;

已创建3行。

SQL> COMMIT;

提交完成。

SQL> SELECT * FROM T;

ID

----------

1

SQL> SELECT * FROM T1;

ID

----------

1

2

3

下面只需要执行下面的PL/SQL语句,就可以重现问题:

SQL> BEGIN

2   UPDATE T SET ID = ID;

3   FOR I IN (SELECT ID FROM T1) LOOP

4    IF I.ID = 2 THEN

5     ROLLBACK;

6    END IF;

7   END LOOP;

8  END;

9  /

BEGIN

*第1行出现错误:

ORA-01002:读取违反顺序ORA-06512:在line 3

看来是由于ROLLBAC

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值