今天同事发现了一个错误,错误号为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