Oracle DB插入重复键但不执行任何操作

x759pob2  于 2022-12-03  发布在  Oracle
关注(0)|答案(3)|浏览(99)

我必须在oracle DB中插入一些数据,而没有事先检查它是否已经存在。
是否存在任何方法,在oracle上的transiction来捕获查询内的异常并处理它以不返回任何异常?
最好是mysql风格的东西,比如

insert .... on duplicate key a=a
z6psavjg

z6psavjg1#

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

6tr1vspr

6tr1vspr2#

如果可以使用PL/SQL,并且在不希望出现任何重复的列上有唯一索引,则可以捕获异常并忽略它:

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

fykwrbwg3#

由于11g有ignore_row_on_dupkey_index提示,忽略唯一约束异常,并让脚本继续处理下一行(如果有),请参阅链接。不记录异常。它需要两个参数,表名和索引名。

INSERT /*+ ignore_row_on_dupkey_index(my_table, my_table_idx) */
INTO my_table(id,name,phone)
    VALUES (24,'Joe','+49 19450704');

相关问题