当前位置:  数据库>oracle

Oracle例外表学习笔记

    来源: 互联网  发布时间:2017-04-18

    本文导语: DML ErrorLogging  Oracle提供了2类的例外表。  这是10gR2以后版本才有的新特征  DML error logging 是ORACLE10gR2版本中的新特征。这个新的特征是解决如下的问题:假定你要向一个目标表更新或者插入大批数据,过程已经运行了很长时间,...

DML ErrorLogging 

Oracle提供了2的例外表。 

这是10gR2以后版本才有的新特征 

DML error logging 是ORACLE10gR2版本中的新特征。这个新的特征是解决如下的问题:假定你要向一个目标表更新或者插入大批数据,过程已经运行了很长时间,就在程序快要结束,一条违反约束的情况发生了,这个事务也会失败。前面花费很长时间运行的工作作废了不算,还要花费很长时间做ROLLBACK处理,这种情况让人恼怒不已。有DML error logging这个特性,可以避免上述情况,当遇到违反约束的情况下,ORACLE会将该条违反约束的数据记录在另外一张表中,程序继续运行。在整个程序运行完后,可以手动或者编写一段代码,对违反约束的数据进行单独处理。   

本节介绍如何INSERT, UPDATE, MERGEDELETE如何使用DML ERROR LOGGING。

建立一张表

create table dmlel

(

pkey varchar2(100) primary key,

field1  integer,

field2 varchar2(10) not null

);

 

alter table dmlel add constraint check_fiels1_ic

CHECK(regexp_like(field1,'^[0-9]{8,10}$'));

 

这张表存在3个约束。

 

现在编写一个脚本,在这个脚本中没有采用DML error logging

 

假定有一张元数据表,我们要将该表的数据插入

 

drop table dmlel_origin purge;

 

create table dmlel_origin

(

 pkey varchar2(10),

 field1  integer,

 field2 varchar2(10)

);

 

 

begin

for i in 1..10000 loop

insert intodmlel_origin(pkey,field1,field2)

values('I'||to_char(i, '0000000'),trunc(dbms_random.value(10000000,999999999)),'x');

end loop;

commit;

end;

 

select * from dmlel_origin

 

我们增加几条违背约束的数据

 

insert intodmlel_origin(pkey,field1,field2)

values('I 0000005',888888888,'x');

 

insert intodmlel_origin(pkey,field1,field2)

values('I 077777',888888,'x');

 

insert intodmlel_origin(pkey,field1,field2)

values('I 077787',88888888,null);

 

insert intodmlel_origin(pkey,field1,field2)

values('I 0000004',88,null);

 

自动建立日志例外表

declare

begin

  -- Test statements here

  dbms_errlog.create_error_log('dmlel','dmlel_log','scott');

end;

 

 

 desc DMLEL_LOG;

Name            Type           Nullable Default Comments

--------------- -------------- -------- ------- --------

ORA_ERR_NUMBER$ NUMBER         Y                        

ORA_ERR_MESG$   VARCHAR2(2000) Y                        

ORA_ERR_ROWID$  UROWID(4000)   Y                        

ORA_ERR_OPTYP$  VARCHAR2(2)    Y                        

ORA_ERR_TAG$    VARCHAR2(2000) Y                        

PKEY            VARCHAR2(4000) Y                        

FIELD1          VARCHAR2(4000) Y                        

FIELD2          VARCHAR2(4000) Y  

insert /*+append*/ into DMLEL

select * from dmlel_origin

 

ORA-02290: 违反检查约束条件 (SCOTT.CHECK_FIELS1_IC)

 

 

truncate table DMLEL

truncate table dmlel_log

 

insert  into DMLEL

select * from dmlel_origin

log errors into dmlel_log('batch_insert'||to_char(sysdate,'yyyymmddhh24:mi:ss')) reject limit unlimited;

 

ORA_ERR_NUMBER$

ORA_ERR_MESG$

ORA_ERR_ROWID$

ORA_ERR_OPTYP$

ORA_ERR_TAG$

PKEY

FIELD1

FIELD2

1

ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C0015362)

I

batch_insert20080922 14:59:50

I 0000005

888888888

x

2290

ORA-02290: 违反检查约束条件 (SCOTT.CHECK_FIELS1_IC)

I

batch_insert20080922 14:59:50

I 077777

888888

x

1400

ORA-01400: 无法将 NULL 插入 ("SCOTT"."DMLEL"."FIELD2")

I

batch_insert20080922 14:59:50

I 077787

88888888

1400

ORA-01400: 无法将 NULL 插入 ("SCOTT"."DMLEL"."FIELD2")

I

batch_insert20080922 14:59:50

I 0000004

88

注意:1、实际上又一条数据有2个字段违反了约束,但日志例外表只反映出一条

     2、如果rollback的话,例外表数据并没有rollback。可以肯定这是一个自主事务。

     3、ora_err_rowid$为null,这是因为这是一个insert操作。


    
 
 

您可能感兴趣的文章:

  • Oracle 免费送出硬纸板的笔记本电脑?!
  • Linux+Oracle学习笔记
  • Oracle 10G进程体系学习笔记
  • Linux 下 Oracle 命令学习笔记
  • Linux下安装oracle问题笔记
  • oracle 技巧学习笔记
  • Oracle数据库基本知识学习笔记
  • 如何在linux + text下安装oracle8/9,我的笔记本是dell latitude d600,我找不到显卡驱动
  • Oracle 下 spfile和pfile使用笔记
  • Linux Oracle 10g 新手笔记
  • Oracle学习笔记(六)
  • oracle9204升级到9206笔记
  • Linux下安装Oracle数据库完整笔记
  • ORACLE学习笔记-添加更新数据函数篇
  • Solaris 10 U3安装Oracle 10g R2实例笔记
  • Linux系统下安装Oracle数据库笔记
  • oracle学习笔记(二)
  • ORACLE学习笔记-新建用户及建表篇
  • ORACLE学习笔记-查询篇
  • Oracle笔记之简单查询、限定查询和排序
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 循序渐进学习Oracle数据库
  • 想在linux下学习oracle,有经验的高手们给点建议。
  • 怎样学习oracle
  • oracle使用sql脚本生成csv文件案例学习
  • 想学习UNIX,LINUX,ORACLE方面的知识。请帮忙。
  • 我该如何学习Linux和Oracle?
  • 学习登录oracle数据库时常用的操作命令
  • 技巧学习 在Python环境下连接Oracle数据库
  • Oracle 数据库学习入门心得
  • Oracle与MySQL学习体会比较
  • oracle数据库学习
  • oracle数据库的学习体会
  • Oracle数据库入门学习经验分享
  • 学习Linux下Oracle数据库编程
  • oracle 数据库学习 基本结构介绍
  • Oracle存储过程入门学习基本语法
  • 学习Oracle数据库的方法
  • Oracle数据库学习方法参考
  • 了解学习国外公司的Oracle DBA面试试题
  • 关于Oracle数据库密码文件的一点学习
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3