程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle防止重復插入數據

oracle防止重復插入數據

編輯:Oracle教程

這個問題整整糾結我一個上午,關鍵問題不是沒有方法而是方法不對!

我最初是按照這個方法:

http://www.cnblogs.com/sunzhenxing19860608/archive/2010/10/19/1855823.html

怎麼試都沒有辦法插入數據,只能更新成功!請教了別人之後才發現這個方法是不對的!

借鑒上面的例子:

數據庫表:TEST

CREATE TABLE TEST( 
    ID      NUMBER NOT NULL,
    NAME    VARCHAR2(30) NOT NULL,
    SEX     VARCHAR2(2) DEFAULT '男'
)
插入兩條數據:
INSERT INTO TEST VALUES(1,'SUNZHENXING','男')
INSERT INTO TEST VALUES(2,'SUNHAILONG','女')
MERGE語句:

例子中的為:

MERGE INTO TEST A USING TEST B 
ON (A.NAME=B.NAME)
WHEN MATCHED THEN
UPDATE SET A.SEX='女'WHERE A.NAME='SUNZHENXING'
WHEN NOT MATCHED THEN
INSERT VALUES (3,'SUNZHENXING','女')
更改後的為:
MERGE INTO TEST A USING (select '3' as ID,'SUNZHENXING' as NAME,'女' as SEX from Test )B 
ON (A.NAME=B.NAME)
WHEN MATCHED THEN
UPDATE SET A.SEX=B.SEX WHERE A.NAME=B.NAME
WHEN NOT MATCHED THEN
INSERT VALUES (B.ID,B.NAME,B.SEX)
這裡的表B是個虛表,不能直接用A表來代替,只有通過查詢得到是否存在這條數據之後才可以進行判斷這條數據是否存在!

個人測試是正確的,如果哪位網友發現了錯誤,請通知本人,本人好進行更正,以防讓更多的人看到錯誤的方法!

謝謝!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved