gpt4 book ai didi

sql - 引发异常时在 Oracle 中继续插入

转载 作者:行者123 更新时间:2023-12-04 22:14:54 24 4
gpt4 key购买 nike

我正在将数据从旧系统迁移到我们的新应用程序(在 Oracle 数据库 10gR2 上运行)。作为迁移的一部分,我正在编写一个脚本,该脚本将数据插入到应用程序使用的表中。

导入的数据行数达到数千,源数据不干净(NOT NULL 列中出现意外的空值等)。所以在通过脚本插入数据的时候,每当发生这样的异常时,脚本会突然结束,整个事务被回滚。

有没有办法,我可以继续插入行干净的数据?
使用 NVL()COALESCE()不是一个选项,因为我想记录导致错误的行,以便可以在下一次通过时更正数据。

编辑:我当前的过程有一个异常处理程序,我正在记录导致错误的第一行。插入是否可以继续而不终止,因为现在在第一个处理的异常处,过程终止执行。

最佳答案

如果数据量更大,PL/SQL 中的逐行处理可能会太慢。
在这些情况下,您可以使用 DML 错误日志记录,如 here 所述。

CREATE TABLE raises (emp_id NUMBER, sal NUMBER 
CONSTRAINT check_sal CHECK(sal > 8000));

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('raises', 'errlog');

INSERT INTO raises
SELECT employee_id, salary*1.1 FROM employees
WHERE commission_pct > .2
LOG ERRORS INTO errlog ('my_bad') REJECT LIMIT 10;

SELECT ORA_ERR_MESG$, ORA_ERR_TAG$, emp_id, sal FROM errlog;

ORA_ERR_MESG$ ORA_ERR_TAG$ EMP_ID SAL
--------------------------- -------------------- ------ -------
ORA-02290: check constraint my_bad 161 7700
(HR.SYS_C004266) violated

关于sql - 引发异常时在 Oracle 中继续插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1065829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com