|
该异常只是在使用forall的时候、并且使用SAVE EXCEPTIONS保存异常信息时:若其中异常为DML异常才会爆出
如下例子:
例一这种情况不会爆出该异常
declare
TYPE num_t
ISTABLEOFNUMBER;
num num_t:=num_t(1,2,3);
i NUMBER;
BEGIN
i:='a';
FORALL i
IN num.first..num.last
--SAVE EXCEPTIONS
--UPDATE demo_t t SET t.sale=t.sale/0 WHERE t.id=num(i);
UPDATE demo_t t
SET t.name= t.name||'123456789123456'WHERE
t.id=num(i);
EXCEPTION
WHENOTHERSTHEN
DBMS_OUTPUT.put_line (SQLERRM (SQLCODE));
end;
输出结果:ORA-06502: PL/SQL:
数字或值错误 :
字符到数值的转换错误
例二 若有 save exception
并且为DML异常都会爆出:
declare
TYPE num_t
ISTABLEOFNUMBER;
num num_t:=num_t(1,2,3);
i NUMBER;
BEGIN
-- i:='a';
FORALL i
IN num.first..num.last
SAVEEXCEPTIONS
--UPDATE demo_t t SET t.sale=t.sale/0 WHERE t.id=num(i);
UPDATE demo_t t
SET t.name= t.name||'123456789123456'WHERE
t.id=num(i);
EXCEPTION
WHENOTHERSTHEN
DBMS_OUTPUT.put_line (SQLERRM (SQLCODE));
end;
输出结果:ORA-24381:
数组 DML
出错 |