Home > Database > Mysql Tutorial > insert into select 批量加载出错解决方案

insert into select 批量加载出错解决方案

WBOY
Release: 2016-06-07 17:23:55
Original
1300 people have browsed it

当使用insert into select 批量加载数据的时候,可能会碰到因为某些数据不符合加载条件,而导致整个insert 语句无法执行,全部ro

当使用insert into select 批量加载数据的时候,可能会碰到因为某些数据不符合加载条件,而导致整个insert 语句无法执行,全部rollback。这时可以使用DML 错误日志的特性,解决这个问题。

只需要创建一个日志表,并且在使用dml语句的时候添加dml error logging 语句,即可将错误的rows记录到日志表中,而且不会影响已经加载到表中的数据。最后修正这些无法加载的数据。

操作步骤如下:

1.    创建一个日志表

可以使用DBMS_ERRLOG包创建,或者手动的创建日志表。如果使用dbms_errlog.create_error_log来创建日志表,默认的会将源表的所有列都加入需要记录的行列中。

2.    执行insert ,并且添加error logging 语句。

3.    最后查询日志表,修改无法加载的数据。

以下是一个insert into select 批量加载的例子:

第一步创建日志表

创建测试表target_t

create table target_t (id number(4),namevarchar2(2000)) ; 

创建源表source_t

create table source_t as select level as id ,'name' || level as name from dual connect by level

使用存储过程创建error logging table target_err_t

使用DBMS_ERRLOG.CREATE_ERROR_LOG会自动补全表中的所有列到日志表中。(这里表名竟然不区分大小写,,看来OracleDabase在向好的方向发展了)

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG(dml_table_name => 'target_t',err_log_table_name=> 'target_err_log') ; 

查看一下表结构

dexter@ORCL> desc target_err_log ; 
 Name                                                Null?    Type 
 ------------------------------------------------------------- ------------------------------------ 
 ORA_ERR_NUMBER$                                              NUMBER 
 ORA_ERR_MESG$                                                  VARCHAR2(2000) 
 ORA_ERR_ROWID$                                                ROWID 
 ORA_ERR_OPTYP$                                                VARCHAR2(2) 
 ORA_ERR_TAG$                                                  VARCHAR2(2000) 
 ID                                                            VARCHAR2(4000) 
 NAME                                                          VARCHAR2(4000) 

linux

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template