`

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
分享到:
评论

相关推荐

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

    本文实例讲述了php计划任务之ignore_user_abort函数实现方法。分享给大家供大家参考。具体分析如下: PHP 不会检测到用户是否已断开连接,直到尝试向客户机发送信息为止,简单地使用 echo 语句无法确保信息发送,参阅 ...

    唯一非聚集索引变量传入时索引失效解决方案

    WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) GO 确认3.执行计划如下: ...

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

    ignore_user_abort 设置与客户机断开是否会终止脚本的执行。 本函数返回 user-abort 设置的之前的值(一个布尔值)。 int ignore_user_abort ([ string $value ] )  参数setting描述:可选。如果设置为 true,则...

    php ignore_user_abort与register_shutdown_function 使用方法

    语法: int ignore_user_abort(int [setting]); 返回值: 整数 函数种类: PHP 系统功能 内容说明 0 – NORMAL(正常)1 – ABORTED(异常退出)2 – TIMEOUT(超时) 本函数配置或取得使用端连接中断后,PHP 程序是否...

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

    希望关闭浏览器后,程序能继续在后台跑,这种情况下需要用到ignore_user_abort()函数

    MySQL binlog_ignore_db 参数的具体使用

    前言:  经过前面文章学习,我们知道 binlog 会记录数据库所有执行的 DDL...当数据库实例开启 binlog 时,我们执行 show master status 命令,会看到有 Binlog_Do_DB 与 Binlog_Ignore_DB 选项。 mysql> show maste

    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]

    校友录系统(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_...

    bundler_ignore_universal

    欢迎使用您的新宝石! 在此目录中,您将找到能够将Ruby库打包为gem所需的文件。 将您的Ruby代码放在文件lib/bundler_ignore_universal 。 要试验该代码,请运行bin/console进行交互式提示。 待办事项:删除此内容...

    ignore_home_key.zip_Home Home

    android的某个activity中屏蔽掉home键的功能

    sqlserver 通用存储过程分页代码(附使用ROW_NUMBER()和不使用ROW_NUMBER()两种情况性能分析)

    表结构: 代码如下: CREATE TABLE [dbo].[Xtest]( [ID] [bigint] IDENTITY(1,1) NOT NULL, [XName] [nvarchar]...INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE

    ignore_obj.rar_return

    Description: Return a value that causes the object to be ignored.

Global site tag (gtag.js) - Google Analytics