【发布时间】:2015-11-25 03:34:46
【问题描述】:
为了更容易解释我的问题,我将粘贴我的整个代码:
drop table tst;
create table tst
(t1 number(2));
set serveroutput on
DECLARE
TYPE vltp IS TABLE OF NUMBER(3);
vl vltp := vltp(2,12,33,344,55,66,7,555,4);
NUMBER_TO_BIG EXCEPTION;
PRAGMA EXCEPTION_INIT(NUMBER_TO_BIG, -01438);
BEGIN
FOR i IN vl.FIRST .. vl.LAST LOOP
INSERT INTO tst VALUES (vl(i));
SAVEPOINT ONE;
END LOOP;
EXCEPTION
WHEN NUMBER_TO_BIG THEN
ROLLBACK TO SAVEPOINT ONE;
END;
/
select * from tst;
基本上,当我将 344 插入表中时,我得到一个异常 (NUMBER_TO_BIG),我希望它回滚到循环但跳过该数字。
预期输出:
tst
-----
2
12
33
55
66
7
4
实际输出:
no rows selected
它正在回滚所有更改,而不仅仅是一个数字。
有什么想法吗?
【问题讨论】:
-
使用 SQL 进行插入会更加简单高效,并使用 LOG ERRORS 子句来处理被拒绝的行:docs.oracle.com/cd/B19306_01/server.102/b14200/…
标签: sql database oracle exception plsql