2013-07-30 42 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;