急~~关于ORA-0000 normal successful completion

[复制链接]
查看11 | 回复0 | 2010-5-11 18:17:00 | 显示全部楼层 |阅读模式
在用存储过程大批量导数据的时候,报错ora-0000 normal successful completion,数据库是9I的,操作系统是WINDOWS 2003.
代码大概是这样的:
BEGIN
OPEN CURSOR_1 FOR SELECT ROWID FROM TABLE_1 WHERE TABLE_1.COL_1 = 'ABC';
LOOP
BEGIN
ROWID_LIST.DELETE; -- ROWID_LIST 是ROWID型的数组
FETCH CURSOR_1 BULK COLLECT
INTO ROWID_LIST LIMIT 10000;
-- 向目的表插入数据
FORALL I IN 1 .. ROWID_LIST%ROWCOUNT-- 报错的语句
INSERT /*+APPEND*/
INTO TABLE_2 NOLOGGING
(COL1,COL2,COL3)
SELECT COL1,COL2,COL3

FROM TABLE_1
WHERE ROWID = ROWID_LIST(I);
-- 删除源表数据
FORALL D IN 1 .. ROWID_LIST%ROWCOUNT
DELETE /*+APPEND*/
TABLE_1 NOGGING
WHERE ROWID = ROWID_LIST(D);

COMMIT;
EXCEPTION
WHEN OTHERS THEN
-- 异常处理部分
END;
END LOOP;
END;
情况是在 "FORALL I IN 1 .. ROWID_LIST%ROWCOUNTINSERT /*+APPEND*/ ... "的时候,报错ORA-0000。
而如果把该语句的/*+APPEND*/ 和 NOLOGGING 去掉,就不会报错。而在另外一个过程中也有完全相同的语句,都是从TABLE_1中导出数据,只是创建游标的WHERE条件不同,同样加了/*+APPEND*/和NOLOGGING,可是没有报错。
另外,ora-0000 normal successful completion 应该是语句正常执行完毕了,基本上是可以忽略,不做任何异常处理,但是SQLCODE = 0,应该不会抛出异常,进入EXCEPTION的。
不知道各位有没有遇到过类似的问题。
虽然可以通过代码,忽略掉ora-0000 normal successful completion这个异常,但我想知道如何避免ORACLE抛出这个异常,或者为什么ORACLE在一个正常结束的SQL语句后抛出这个异常。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行