该异常只是在使用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 出错