当前位置:  数据库>oracle

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

    来源: 互联网  发布时间:2017-05-13

    本文导语: 当使用insert into select 批量加载数据的时候,可能会碰到因为某些数据不符合加载条件,而导致整个insert 语句无法执行,全部rollback。这时可以使用DML 错误日志的特性,解决这个问题。 只需要创建一个日志表,并且在使用dml语句...

当使用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 '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) 


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Double Ended Queues 成员 insert():insert elements into the dequeue
  • mssql insert into 和insert into select性能比较
  • C++ MultiMaps 成员 insert():插入元素
  • 解决Hibernate JPA中insert插入数据后自动执行select last_insert_id()
  • C++ Maps 成员 insert():插入元素
  • 急!!! JSP对数据库 INSERT 记录.....................HOLEN
  • C++ Lists(链表) 成员 insert():插入一个元素到list中
  • 如何在SELECT/INSERT...语句中加入变量?
  • C++ Double Ended Queues(双向队列) 成员 insert():插入一个元素到双向队列中
  • java开发知识 iis7站长之家
  • java命名空间java.awt类event的类成员方法: insert定义及介绍
  • INSERT出的问题,谢谢
  • java命名空间javax.swing枚举dropmode的类成员方法: on_or_insert定义及介绍
  • insert问题(初学者)
  • java命名空间javax.accessibility接口accessibletablemodelchange的类成员方法: insert定义及介绍
  • 如何insert日期类型 ?
  • C++ Vectors 成员 insert():插入元素到Vector中
  • 如何获的INSERT后的id(auto increment)的值?
  • java命名空间javax.swing.event类documentevent.eventtype的类成员方法: insert定义及介绍
  • 关于shell下面insert键失灵的解决办法
  • java命名空间javax.swing枚举dropmode的类成员方法: on_or_insert_rows定义及介绍
  • last_insert_id()准确吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,