Oracle11gr2新增提示IGNORE_ROW_ON_DUPKEY_INDEX
在11.2中,Oracle新增了一個HINT,使得INSERT INTO SELECT操作可以避免插入重複的記錄。
首先建立一個包含主鍵的表:
SQL> CREATE TABLE T
2 (ID NUMBER,
3 NAME VARCHAR2(30),
4 CONSTRAINT PK_T PRIMARY KEY (ID));
表已建立。
SQL> INSERT INTO T
2 SELECT ROWNUM, OBJECT_NAME
3 FROM DBA_OBJECTS
4 WHERE ROWNUM <= 200;
已建立200行。
SQL> SELECT *
2 FROM T
3 WHERE ID = 100;
ID NAME
---------- ------------------------------
100 FIXED_OBJ$
下面清空表中資料,然後插入一條記錄:
SQL> TRUNCATE TABLE T;
表被截斷。
SQL> INSERT INTO T
2 VALUES (100, 'TEST');
已建立 1 行。
SQL> COMMIT;
提交完成。
下面執行普通的INSERT INTO SELECT語句,會由於重複記錄的存在而報錯:
SQL> INSERT INTO T
2 SELECT ROWNUM, OBJECT_NAME
3 FROM DBA_OBJECTS
4 WHERE ROWNUM <= 200;
INSERT INTO T
*
第 1 行出現錯誤:
ORA-00001: 違反唯一約束條件 (YANGTK.PK_T)
透過使用新增的提示,可以避免插入重複的記錄:
SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T, PK_T) */
2 INTO T
3 SELECT ROWNUM, OBJECT_NAME
4 FROM DBA_OBJECTS
5 WHERE ROWNUM <= 200;
已建立199行。
除了指定索引名稱外,這個HINT還有另一種寫法,指定主鍵列:
SQL> ROLLBACK;
回退已完成。
SQL> INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX(T(ID)) */
2 INTO T
3 SELECT ROWNUM, OBJECT_NAME
4 FROM DBA_OBJECTS
5 WHERE ROWNUM <= 200;
已建立199行。
SQL> COMMIT;
提交完成。
SQL> SELECT *
2 FROM T
3 WHERE ID = 100;
ID NAME
---------- ------------------------------
100 TEST
如果不關聯當前表的話,這個功能只能透過PL/SQL實現,而現在可以透過加上IGNORE_ROW_ON_DUPKEY_INDEX的一條INSERT語句實現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-615440/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11gr2新增APPEND_VALUES提示OracleAPP
- ORACLE11GR2 中使用 IGNORE_ROW_ON_DUPKEY_INDEXOracleIndex
- Oracle11gr2新增提示CHANGE_DUPKEY_ERROR_INDEXOracleErrorIndex
- Oracle11gr2新增版本功能(二)Oracle
- Oracle11gr2新增版本功能(一)Oracle
- Oracle11gr2新增版本功能(三)Oracle
- 11G 新特性: 新加的提示IGNORE_ROW_ON_DUPKEY_INDEXIndex
- Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEXOracleIndex
- Oracle11gr2新增遞迴WITH語句(三)Oracle遞迴
- Oracle11gr2新增遞迴WITH語句(二)Oracle遞迴
- Oracle11gr2新增遞迴WITH語句(一)Oracle遞迴
- Oracle11gr2新增CREATE OR REPLACE FORCE TYPE功能Oracle
- Oracle11gr2新增PARALLEL_FORCE_LOCAL引數OracleParallel
- Oracle11gr2新增表的RESULT CACHE屬性Oracle
- Oracle11gr2新增ALTER DATABASE LINK語法OracleDatabase
- Metasploit新增技巧提示功能
- hint IGNORE_ROW_ON_DUPKEY_INDEXIndex
- Oracle11gr2物化檢視日誌新增PURGE語句Oracle
- Oracle11gr2觸發器新增版本升級功能(二)Oracle觸發器
- Oracle11gr2觸發器新增版本升級功能(一)Oracle觸發器
- Eclipse新增更多提示Eclipse
- Oracle10G新增NO提示Oracle
- ibatis 新增DTD 自動提示BAT
- Oracle11gr2物化檢視日誌新增COMMIT SCN語句OracleMIT
- Java 在PDF中新增工具提示|ToolTipJava
- Java 在PDF中新增工具提示ToolTipJava
- Oracle11gr2網路配置新增TRANSPORT_CONNECT_TIMEOUT引數Oracle
- idea Maven新增依賴沒有提示IdeaMaven
- javascript input文字框新增提示文字效果JavaScript
- Myeclipse 2014 javascript 新增 jquery 程式碼提示EclipseJavaScriptjQuery
- Oracle11gR2 Active DataGuardOracle
- Oracle11gR2 Dataguard搭建Oracle
- 新增 CNAME 記錄提示和 A 記錄衝突如何解決?
- sublime3中如何新增javascript程式碼自動提示JavaScript
- 為你的 JavaScript 專案新增智慧提示和型別檢查JavaScript型別
- Dynamics CRM 向檢視列新增自定義圖示和提示資訊
- Oracle11gr2之orapwd變化Oracle
- 解除安裝Oracle11gr2 for SolarisOracle