2013-07-30 48 views
1

我必須在oracle數據庫中插入一些數據,而無需事先檢查它是否已存在。Oracle數據庫插入和重複密鑰無關

是否存在任何方式,對oracle進行轉換以捕獲查詢內部的異常並處理它以便不返回任何異常?

這將是MySQL的風格完美類似

insert .... on duplicate key a=a 
+1

哪個Oracle版本? 11.2爲此提出了一個提示。 –

+0

哪些提示已經介紹? – rodi

+0

請參閱:http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements006.htm#CHDEGDDG –

回答

6

您可以使用MERGE。雖然語法與普通插入有點不同,

MERGE INTO test USING (
    SELECT 1 AS id, 'Test#1' AS value FROM DUAL -- your row to insert here 
) t ON (test.id = t.id)       -- duplicate check 
WHEN NOT MATCHED THEN 
    INSERT (id, value) VALUES (t.id, t.value); -- insert if no duplicate 

An SQLfiddle to test with

3

如果你可以使用PL/SQL,和你有,你不希望任何重複的列的唯一索引,那麼你就可以捕獲該異常,而忽略它:

begin 
    insert into your_table (your_col) values (your_value); 
exception 
    when dup_val_on_index then null; 
end;