2

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

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

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

insert .... on duplicate key a=a
4

2 回答 2

10

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

一个用于测试的 SQLfiddle

于 2013-07-30T12:15:28.023 回答
3

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

begin
   insert into your_table (your_col) values (your_value);
exception
   when dup_val_on_index then null;
end;
于 2013-07-30T12:26:34.673 回答