Skip to main content
 首页 » 编程设计

Oracle 相当于 MySQL INSERT IGNORE

2024年12月31日15java哥

我需要更新一个查询,以便它在插入之前检查重复条目不存在。在 MySQL 中,我可以只使用 INSERT IGNORE,这样如果发现重复记录,它就会跳过插入,但我似乎找不到 Oracle 的等效选项。有什么建议?

请您参考如下方法:

查看 MERGE 语句。这应该做你想做的 - 它是 WHEN NOT MATCHED将执行此操作的条款。

对于 Oracle 缺乏对真正的 VALUES() 子句的支持,具有固定值的单个记录的语法非常笨拙:

MERGE INTO your_table yt 
USING ( 
   SELECT 42 as the_pk_value,  
          'some_value' as some_column 
   FROM dual 
) t on (yt.pk = t.the_pke_value)  
WHEN NOT MATCHED THEN  
   INSERT (pk, the_column) 
   VALUES (t.the_pk_value, t.some_column); 

另一种方法(例如,如果您要从不同的表进行批量加载)是使用 Oracle 的“错误日志记录”工具。该语句将如下所示:
 INSERT INTO your_table (col1, col2, col3) 
 SELECT c1, c2, c3 
 FROM staging_table 
 LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED; 

之后所有会抛出错误的行都可以在表 errlog 中找到。 .您需要创建该 errlog在使用 DBMS_ERRLOG.CREATE_ERROR_LOG 运行插入之前手动手动表(或您选择的任何名称) .

详情请参阅手册