我必须找到在 INSERT ALL 子句中报告损坏插入的任何方法。
我需要知道哪些行完全无效并将其插入特殊的日志表中。
可以这样做吗?
我正在尝试在插入之前和之后在表上写入触发器,但是如果抛出任何异常则它不起作用。
另一个想法是写入过程将 INSERT ALL 转换为单个 INSERT 并在循环中执行它,在此捕获异常之后,但我遇到了实现这个想法的麻烦。 / p>
答案 0 :(得分:2)
是的,您可以使用DML错误记录子句
INSERT INTO dw_empl
SELECT employee_id, first_name, last_name, hire_date, salary, department_id
FROM employees
WHERE hire_date > sysdate - 7
LOG ERRORS INTO err_empl ('daily_load') REJECT LIMIT 25
详情请点击此处: https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables004.htm
答案 1 :(得分:0)
这里还有一个选项 保存例外"保存例外"条款
forall i in v_data_list.first .. v_data_list.last save exceptions
insert into original_table values v_data_list (i);
然后迭代保存的异常
exception
when others then
if sqlcode = -24381 then
for indx in 1 .. sql%bulk_exceptions.count loop
Pkg_log_err.log_error(p_Sqlcode => sql%bulk_exceptions(indx).error_code,
p_Sqlerrm => sqlerrm(-sql%bulk_exceptions(indx).error_code));
end loop;