Oracle DB插入并在重复键上不执行任何操作

时间:2013-07-30 12:07:11

标签: sql oracle oracle-sqldeveloper

我必须在oracle DB中插入一些数据,而不事先检查它是否已经存在。

是否存在任何方式,oracle上的transiction捕获查询中的异常并处理它不返回任何异常?

这将是完美的东西,如mysql的风格,如

insert .... on duplicate key a=a

2 个答案:

答案 0 :(得分:8)

您可以使用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

答案 1 :(得分:3)

如果你可以使用PL / SQL,并且在你不想要任何重复的列上有一个唯一索引,那么你可以捕获异常并忽略它:

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