Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 表中类似SQL加载程序的错误_Oracle_Plsql_Oracle11g_Plsqldeveloper - Fatal编程技术网

Oracle 表中类似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_

我有外置的桌子。我想从这些表中提取数据,并在其他表中插入/合并这些数据

现在,当select from=>insert into查询或merge查询运行时,可能(也可能)数据质量不好,这将导致中断查询。假设外部表中有000000AS日期,若我合并数据,这将导致中断查询

如何将这些错误记录在一个表(例如)错误表中,该表将记录错误、错误原因、行号和列名?就像您在SQL加载程序日志中看到的一样。例如:

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>;