ORA-06502: PL/SQL: 游标为空时出现数字或值错误
ORA-06502: PL/SQL: numeric or value error in the case of empty cursor
我不断收到错误:ORA-06502:PL/SQL:在过程的第二个 运行 期间出现数字或值错误。
以下部分 运行 第一次正常工作。读取 150 000 条记录对其进行处理,操作..
当我第二次 运行 时,my_cursor 是空的,因为在第一个 运行 中处理了所有 150 000 条记录。除了这里我会得到 NO_DATA_FOUND 但我不断收到 ERROR: ORA-06502: PL/SQL: numeric or value error.
第二次执行后用日志打印行-> read/inserted : 0。这也可以,因为没有数据要处理...
OPEN my_cursor;
LOOP
FETCH my_cursor BULK COLLECT INTO var_t LIMIT 100000;
FOR i IN var_t.FIRST .. var_t.LAST
LOOP
var_read_cnt := var_read_cnt + 1;
END LOOP;
EXIT WHEN my_cursor%NOTFOUND;
END LOOP;
close my_cursor;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('OK no data found SQLCODE: '||SQLCODE||' -- ERROR: '||SQLERRM);
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(' Unexcpected exception SQLCODE: '||SQLCODE||' -- ERROR: '||SQLERRM);
END;
DBMS_OUTPUT.put_line('read/inserted : '|| var_read_cnt);
使用这个:
LOOP
FETCH my_cursor BULK COLLECT INTO var_t LIMIT 100000;
IF var_t.FIRST IS NOT NULL THEN
FOR i IN var_t.FIRST .. var_t.LAST
LOOP
var_read_cnt := var_read_cnt + 1;
END LOOP;
END IF;
EXIT WHEN my_cursor%NOTFOUND;
END LOOP;
注意,OPEN cursor ...
结构永远不会引发 NO_DATA_FOUND
异常,因此您可以跳过该异常处理程序。
我不断收到错误:ORA-06502:PL/SQL:在过程的第二个 运行 期间出现数字或值错误。 以下部分 运行 第一次正常工作。读取 150 000 条记录对其进行处理,操作.. 当我第二次 运行 时,my_cursor 是空的,因为在第一个 运行 中处理了所有 150 000 条记录。除了这里我会得到 NO_DATA_FOUND 但我不断收到 ERROR: ORA-06502: PL/SQL: numeric or value error.
第二次执行后用日志打印行-> read/inserted : 0。这也可以,因为没有数据要处理...
OPEN my_cursor;
LOOP
FETCH my_cursor BULK COLLECT INTO var_t LIMIT 100000;
FOR i IN var_t.FIRST .. var_t.LAST
LOOP
var_read_cnt := var_read_cnt + 1;
END LOOP;
EXIT WHEN my_cursor%NOTFOUND;
END LOOP;
close my_cursor;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.put_line('OK no data found SQLCODE: '||SQLCODE||' -- ERROR: '||SQLERRM);
WHEN OTHERS THEN
DBMS_OUTPUT.put_line(' Unexcpected exception SQLCODE: '||SQLCODE||' -- ERROR: '||SQLERRM);
END;
DBMS_OUTPUT.put_line('read/inserted : '|| var_read_cnt);
使用这个:
LOOP
FETCH my_cursor BULK COLLECT INTO var_t LIMIT 100000;
IF var_t.FIRST IS NOT NULL THEN
FOR i IN var_t.FIRST .. var_t.LAST
LOOP
var_read_cnt := var_read_cnt + 1;
END LOOP;
END IF;
EXIT WHEN my_cursor%NOTFOUND;
END LOOP;
注意,OPEN cursor ...
结构永远不会引发 NO_DATA_FOUND
异常,因此您可以跳过该异常处理程序。