如果行不存在,则 Oracle 插入

Oracle insert if row does not exist(如果行不存在,则 Oracle 插入)
本文介绍了如果行不存在,则 Oracle 插入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

insert ignore into table1 
select 'value1',value2 
from table2 
where table2.type = 'ok'

当我运行它时,我收到错误缺少 INTO 关键字".

When I run this I get the error "missing INTO keyword".

推荐答案

当我运行它时,我收到错误缺少 INTO 关键字".

When I run this I get the error "missing INTO keyword" .

因为 IGNORE 不是 Oracle 中的关键字.那是 MySQL 语法.

Because IGNORE is not a keyword in Oracle. That is MySQL syntax.

您可以做的是使用 MERGE.

What you can do is use MERGE.

merge into table1 t1
    using (select 'value1' as value1 ,value2 
           from table2 
           where table2.type = 'ok' ) t2
    on ( t1.value1 = t2.value1)
when not matched then
   insert values (t2.value1, t2.value2)
/

从 Oracle 10g 开始,我们可以在不处理两个分支的情况下使用合并.在 9i 中,我们不得不使用虚拟" MATCHED 分支.

From Oracle 10g we can use merge without handling both branches. In 9i we had to use a "dummy" MATCHED branch.

在更古老的版本中,唯一的选择是:

In more ancient versions the only options were either :

  1. 在发出 INSERT 之前(或在子查询中)测试该行是否存在;
  2. 使用 PL/SQL 执行 INSERT 并处理任何由此产生的 DUP_VAL_ON_INDEX 错误.

这篇关于如果行不存在,则 Oracle 插入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)