我有外部表。我想从这些表中提取数据并将该数据插入/合并到其他表中。
现在,当 select from => insert into query 或 merge query 运行时,数据可能(并且很可能)质量很差,这将导致查询中断。假设外部表中有 000000 作为日期,如果我正在合并数据,这将导致查询中断。
如何将这些错误记录在一个表(例如)错误表中,该表将记录错误、错误原因、行号和列名?就像您在 SQL Loader 日志中看到的一样。例如:
Record 2324: Rejected - Error on table AA_STAG_VR_01, column KS1.
ORA-01843: not a valid month
并且查询不应该中断。而是记录错误并继续前进,就像它在 SQL 加载器中发生的那样。
可能吗?我试图在网上四处寻找,但我什么也找不到,或者我根本不知道神奇的词
提前致谢 :-)
编辑:好的,我能够使用以下方法解决问题(嗯,部分)。
CREATE TABLE error_table (
ora_err_number$ NUMBER,
ora_err_mesg$ VARCHAR2(2000),
ora_err_rowid$ ROWID,
ora_err_optyp$ VARCHAR2(2),
ora_err_tag$ VARCHAR2(2000)
)
INSERT INTO destination_table (column)
SELECT column FROM external_table
LOG ERRORS INTO error_table REJECT LIMIT UNLIMITED
这给了我:
选择 * FROM 错误表;
----------------------------------------------------------------------------------------------------------------------------------------------------------
ORA_ERR_NUMBER$ | ORA_ERR_MESG$ | ORA_ERR_ROWID$ | ORA_ERR_OPTYP$ | ORA_ERR_TAG$ |
----------------------------------------------------------------------------------------------------------------------------------------------------------
12899 |ORA-12899: value too large for column "SYSTEM"."destination_table"."column"
到目前为止,一切都很好。但是,我想知道哪个记录号(external_table 中的行号)有此错误。因为有可能第 10 条记录没问题,但第 11 条记录很差。