Oracle 表中类似SQL加载程序的错误
我有外置的桌子。我想从这些表中提取数据,并在其他表中插入/合并这些数据 现在,当select from=>insert into查询或merge查询运行时,可能(也可能)数据质量不好,这将导致中断查询。假设外部表中有000000AS日期,若我合并数据,这将导致中断查询 如何将这些错误记录在一个表(例如)错误表中,该表将记录错误、错误原因、行号和列名?就像您在SQL加载程序日志中看到的一样。例如:Oracle 表中类似SQL加载程序的错误,oracle,plsql,oracle11g,plsqldeveloper,Oracle,Plsql,Oracle11g,Plsqldeveloper,我有外置的桌子。我想从这些表中提取数据,并在其他表中插入/合并这些数据 现在,当select from=>insert into查询或merge查询运行时,可能(也可能)数据质量不好,这将导致中断查询。假设外部表中有000000AS日期,若我合并数据,这将导致中断查询 如何将这些错误记录在一个表(例如)错误表中,该表将记录错误、错误原因、行号和列名?就像您在SQL加载程序日志中看到的一样。例如: Record 2324: Rejected - Error on table AA_STAG_VR_
Record 2324: Rejected - Error on table AA_STAG_VR_01, column KS1.
ORA-01843: not a valid month
这个问题不应该打断你,而应该打断你。而是记录错误并继续,就像在SQL Loader中发生的那样
可能吗?我试着在网上四处寻找,但我并没有发现任何东西,或者我只是不知道神奇的词语
提前感谢:-)
编辑:
好的,我能够使用以下方法解决这个问题(好的,部分)
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
这给了我:
从错误_表中选择*
----------------------------------------------------------------------------------------------------------------------------------------------------------
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"
到目前为止,一切顺利。但是,我想知道哪个记录编号(外部_表中的行号)有此错误。因为有可能前10条记录正常,但第11条记录不好。签出子句。这可能对你有帮助
15:57:02@>conn hr/hr@vm_xe
有联系的。
15:57:15 HR@vm_xe>创建表err\u test(唯一列号主键);
表已创建。
已过时间:00:00:01.51
15:57:46 HR@vm_xe>执行DBMS_ERRLOG。创建_ERROR_LOG('err_test','ERRLOG');
PL/SQL过程已成功完成。
已过时间:00:00:00.46
15:59:22 HR@vm_xe>插入到err_测试中,通过rownum<10从双连接选择mod(rownum,2)
16:00:00 2将错误记录到errlog(“测试”)拒绝限制中;
创建了2行。
已过时间:00:00:00.87
16:00:27 HR@vm_xe>承诺;
提交完成。
已过时间:00:00:00.00
16:02:37 HR@vm_xe>col ora_err_mesg$a75
16:02:43 HR@vm_xe>a10的col unique_列
16:02:47 HR@vm_xe>从errlog中选择唯一列ora_err_mesg$;
独特的颜色或错误
---------- ---------------------------------------------------------------------------
1 ORA-00001:违反了唯一约束(HR.SYS_C007056)
0 ORA-00001:违反了唯一约束(HR.SYS_C007056)
1 ORA-00001:违反了唯一约束(HR.SYS_C007056)
0 ORA-00001:违反了唯一约束(HR.SYS_C007056)
1 ORA-00001:违反了唯一约束(HR.SYS_C007056)
0 ORA-00001:违反了唯一约束(HR.SYS_C007056)
1 ORA-00001:违反了唯一约束(HR.SYS_C007056)
选择7行。
已过时间:00:00:00.03
签出条款。这可能对你有帮助
15:57:02@>conn hr/hr@vm_xe
有联系的。
15:57:15 HR@vm_xe>创建表err\u test(唯一列号主键);
表已创建。
已过时间:00:00:01.51
15:57:46 HR@vm_xe>执行DBMS_ERRLOG。创建_ERROR_LOG('err_test','ERRLOG');
PL/SQL过程已成功完成。
已过时间:00:00:00.46
15:59:22 HR@vm_xe>插入到err_测试中,通过rownum<10从双连接选择mod(rownum,2)
16:00:00 2将错误记录到errlog(“测试”)拒绝限制中;
创建了2行。
已过时间:00:00:00.87
16:00:27 HR@vm_xe>承诺;
提交完成。
已过时间:00:00:00.00
16:02:37 HR@vm_xe>col ora_err_mesg$a75
16:02:43 HR@vm_xe>a10的col unique_列
16:02:47 HR@vm_xe>从errlog中选择唯一列ora_err_mesg$;
独特的颜色或错误
---------- ---------------------------------------------------------------------------
1 ORA-00001:违反了唯一约束(HR.SYS_C007056)
0 ORA-00001:唯一的c
15:57:02 @> conn hr/hr@vm_xe
Connected.
15:57:15 HR@vm_xe> create table err_test(unique_column number primary key);
Table created.
Elapsed: 00:00:01.51
15:57:46 HR@vm_xe> EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('err_test', 'errlog');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.46
15:59:22 HR@vm_xe> insert into err_test select mod(rownum, 2) from dual connect by rownum < 10
16:00:00 2 log errors into errlog ('test') reject limit unlimited;
2 rows created.
Elapsed: 00:00:00.87
16:00:27 HR@vm_xe> commit;
Commit complete.
Elapsed: 00:00:00.00
16:02:37 HR@vm_xe> col ora_err_mesg$ for a75
16:02:43 HR@vm_xe> col unique_column for a10
16:02:47 HR@vm_xe> select unique_column, ora_err_mesg$ from errlog;
UNIQUE_COL ORA_ERR_MESG$
---------- ---------------------------------------------------------------------------
1 ORA-00001: unique constraint (HR.SYS_C007056) violated
0 ORA-00001: unique constraint (HR.SYS_C007056) violated
1 ORA-00001: unique constraint (HR.SYS_C007056) violated
0 ORA-00001: unique constraint (HR.SYS_C007056) violated
1 ORA-00001: unique constraint (HR.SYS_C007056) violated
0 ORA-00001: unique constraint (HR.SYS_C007056) violated
1 ORA-00001: unique constraint (HR.SYS_C007056) violated
7 rows selected.
Elapsed: 00:00:00.03
CREATE TABLE <table_name> (
<column_definitions>)
ORGANIZATION EXTERNAL
(TYPE oracle_loader
DEFAULT DIRECTORY <oracle_directory_object_name>
ACCESS PARAMETERS (
RECORDS DELIMITED BY newline
BADFILE <file_name>
DISCARDFILE <file_name>
LOGFILE <file_name>
[READSIZE <bytes>]
[SKIP <number_of_rows>
FIELDS TERMINATED BY '<terminator>'
REJECT ROWS WITH ALL NULL FIELDS
MISSING FIELD VALUES ARE NULL
(<column_name_list>))\
LOCATION ('<file_name>'))
[PARALLEL]
REJECT LIMIT <UNLIMITED | integer>;