Oracle 相当于 MySQL INSERT IGNORE?

标签 oracle insert duplicates

我需要更新一个查询,以便它在插入之前检查重复条目不存在。在 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 运行插入之前手动手动表(或您选择的任何名称) .

详情请参阅手册

关于Oracle 相当于 MySQL INSERT IGNORE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9332360/

相关文章:

python - 加快 pymongo 在此循环中的插入速度

python - 从python脚本中生成的文本中去除重复的单词

oracle - 相当于Oracle中的IF NOT EXISTS?

sql - 如何在oracle中分散两个区间的平均值

php - 中断php中存储过程(mysql)的执行

sql - 将数据插入分桶 Hive 表

SQL 查询 - 两个表的间接连接

database - 如何在提交后回滚我的数据库更改?

java - 为什么 Hibernate 会重复对象,尽管数据库表不包含重复行?

JQuery:删除重复元素?