`

Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEX

阅读更多
insert提示IGNORE_ROW_ON_DUPKEY_INDEX

转自:http://space.itpub.net/18922393/viewspace-752123

在 insert into tablea ...select * from tableb中,如果存在唯一约束,会导致整个insert操作失败。使用IGNORE_ROW_ON_DUPKEY_INDEX提示,会忽略唯一约束冲突,回滚当前行,继续完成其他行的插入。

1,注意:
(1)如下三个提示CHANGE_DUPKEY_ERROR_INDEX, IGNORE_ROW_ON_DUPKEY_INDEX, RETRY_ON_ROW_CHANGE与其他提示不同,特别之处在于存在“语义效果(semantic effect)”。
“semantic effect”指在违反以下规则时该提示会导致错误信息:
*如果指定了索引名称,该索引必须存在且唯一;否则会导致ORA-38913错误;
*如果指定索引,必须指定一个索引。如果未指定索引,会导致ORA-38912错误;如果指定了多个索引,会导致ORA-38915错误。
*不能同时指定CHANGE_DUPKEY_ERROR_INDEX和IGNORE_ROW_ON_DUPKEY_INDEX提示;否则会导致ORA-38915错误。

提示CHANGE_DUPKEY_ERROR_INDEX有两种用法,一种是指定索引的名称,另一种是指明所有构成索引的列。

需要注意的是,这个HINT只对唯一索引生效,而对唯一约束无效:

(2)与其他提示相同,存在语法错误的提示将被忽略.

(3)该提示仅适用于单个表的insert操作。


2,测试:
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected asmh@boclink

SQL>
SQL> drop table test;

Table dropped
SQL> create table test(x int,y int);

Table created
SQL> insert into test values(1,1);

1 row inserted
SQL> insert into test values(2,2);

1 row inserted
SQL> insert into test values(3,3);

1 row inserted
SQL> commit;

Commit complete
SQL> create unique index uidx_test_x on test(x);

Index created
SQL> drop table test2;

Table dropped
SQL> create table test2
  2  as
  3  select * from test;

Table created
SQL> insert into test2 values(4,4);

1 row inserted
SQL> insert into test2 values(5,5);

1 row inserted
SQL> commit;

Commit complete
SQL> insert into test
  2  select * from test2;

insert into test
select * from test2

ORA-00001: 违反唯一约束条件 (MH.UIDX_TEST_X)
SQL> rollback;

Rollback complete
SQL> insert into test
  2  select * from test2;

insert into test
select * from test2

ORA-00001: 违反唯一约束条件 (MH.UIDX_TEST_X)
SQL> commit;

Commit complete
SQL> insert /*+  IGNORE_ROW_ON_DUPKEY_INDEX(test(x)) */into test
  2  select * from test2;

2 rows inserted
SQL> commit;

Commit complete

SQL> select * from test;

                                      X                                       Y
--------------------------------------- ---------------------------------------
                                      1                                       1
                                      2                                       2
                                      3                                       3
                                      4                                       4
                                      5                                       5

SQL>

SQL>
SQL> insert /*+  IGNORE_ROW_ON_DUPKEY_INDEX(test,uidx_test_x) */into test
  2  select * from test2;

0 rows inserted
SQL> commit;

Commit complete
分享到:
评论

相关推荐

    oracle 11.2 安装.docx

    Oracle 11.2安装是数据库管理员和开发者在学习Oracle技术时的重要步骤。这个文档主要指导初学者在Linux系统上安装Oracle 11.2数据库的详细过程,涵盖了操作系统准备、依赖包安装、用户和权限配置、内核参数调整以及...

    php计划任务之ignore_user_abort函数实现方法

    然而,如果在脚本开始时调用`ignore_user_abort(true)`,脚本就会忽略用户的断开连接,继续执行直至完成。 例如,下面的代码演示了一个简单的计划任务,它每半小时将当前时间写入到`time_task.txt`文件中: ```php...

    ignore_obj.rar_return

    当我们谈论“ignore_obj.rar_return”时,这可能是某种特定情况下的命名约定,暗示着某个函数或者方法可能被设计用来忽略某个对象并返回一个特定的值。 在C语言中,如`image_browser_1.c`和`ignore_obj.c`这两个源...

    PHP ignore_user_abort函数详细介绍和使用实例

    本文将详细介绍ignore_user_abort函数的使用方法,并提供实例帮助理解其作用。 首先,我们来了解ignore_user_abort函数的原型: ```php int ignore_user_abort([bool $setting]); ``` ignore_user_abort函数允许...

    浏览器关闭后,能继续执行的php函数(ignore_user_abort)

    在本例中,提到的核心函数是 `ignore_user_abort()`。 `ignore_user_abort()` 函数是PHP中的一个控制函数,它用于设置当用户中止页面请求时,是否中断脚本的执行。当该函数被设置为 `true` 时,即使客户端断开了...

    ignore_0xff.rar_scale

    标题"ignore_0xff.rar_scale"暗示了我们正在处理一个与忽略特定字节(在这种情况下是0xff)相关的压缩文件,可能涉及到某种特定的编码或解码算法优化。描述中的"sf_estim.h"表明文件包含了关于“scale factor ...

    ignore_home_key.zip_Home Home

    因此,在实际开发中,应该谨慎处理这种情况,例如提供一个明显的退出按钮或提示。 压缩包中的`ignore_home_key.txt`可能包含了具体的代码示例或者更详细的解释。通过分析这个文本文件,开发者可以更好地理解和实现...

    hibernate3.0例子源码

    hibernate3.0连接SQLServer代码简单例子,单表t_user...)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

    php ignore_user_abort与register_shutdown_function 使用方法

    它的语法是 `int ignore_user_abort([int setting])`,其中 `setting` 参数是可选的,用于设置新的连接中断处理模式。返回值是一个整数,表示当前的设置状态。如果设置为 `true` 或非零值,PHP会忽略用户的中断请求...

    校友录系统(ASP.NET 3.5实现)

    校友录系统(ASP.NET 3.5实现)USE [friends] ...)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

    银联联行号开户行SQL

    2018最全的开户行行号,支行,网点号。...)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

    留言本系统(ASP.NET 3.5实现)

    留言本系统(ASP.NET 3.5实现)USE [guestbook] ...)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

    Bootstrap_FileUpload4.3.9+Drapper+IOC+MVC

    Bootstrap_FileUpload4.3.9+Drapper+IOC+MVC ,包含...)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO

    省级级联,可直接创建表,导入数据库最新20180831

    USE ...)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO

    VHDL时钟秒表没电路图MAX2文件C2

    FIT_IGNORE_TIMING = ON; DEMOTE_SPECIFIC_LCELL_ASSIGNMENTS_TO_LAB_ASSIGNMENTS = OFF; IGNORE_LOCAL_ROUTING_ASSIGNMENTS = OFF; IGNORE_DEVICE_ASSIGNMENTS = OFF; IGNORE_LC_ASSIGNMENTS = OFF; IGNORE_...

Global site tag (gtag.js) - Google Analytics