oracle insert if not exists 语句
Posted
技术标签:
【中文标题】oracle insert if not exists 语句【英文标题】:Oracle insert if not exists statement 【发布时间】:2012-06-05 04:31:44 【问题描述】:insert into OPT (email, campaign_id) values('mom@cox.net',100)
where not exists( select * from OPT where (email ="mom@cox.net" and campaign_id =100)) ;
错误报告:SQL 错误:ORA-00933:SQL 命令未正确结束 00933. 00000 - “SQL 命令未正确结束” *原因: *行动:
如果Oracle中不存在新行,如何插入?
【问题讨论】:
【参考方案1】:根据已经存在的另一条记录插入某些内容(在 Oracle 中)的正确方法是使用 MERGE 语句。
请注意,这个问题已经在这里回答了:
oracle insert if row not exists insert if not exists oracle【讨论】:
【参考方案2】:insert into OPT (email, campaign_id)
select 'mom@cox.net',100
from dual
where not exists(select *
from OPT
where (email ='mom@cox.net' and campaign_id =100));
【讨论】:
简单而巧妙的批量插入。谢谢【参考方案3】:insert into OPT (email, campaign_id)
select 'mom@coxnet' as email, 100 as campaign_id from dual MINUS
select email, campaign_id from OPT;
如果 OPT 中已经有 mom@cox.net
/100
的记录,MINUS
将从 select 'mom@coxnet' as email, 100 as campaign_id from dual
记录中减去此记录,并且不会插入任何内容。另一方面,如果没有这样的记录,MINUS
不会减去任何内容,并将插入值 mom@coxnet
/100
。
正如 p.marino 已经指出的那样,merge
可能是解决您的问题的更好(和更正确)的解决方案,因为它是专门为解决您的任务而设计的。
【讨论】:
【参考方案4】:MERGE INTO OPT
USING
(SELECT 1 "one" FROM dual)
ON
(OPT.email= 'mom@cox.net' and OPT.campaign_id= 100)
WHEN NOT matched THEN
INSERT (email, campaign_id)
VALUES ('mom@cox.net',100)
;
【讨论】:
点评来源: 您好,请不要只回答源代码。尝试对您的解决方案如何工作提供一个很好的描述。请参阅:How do I write a good answer?。谢谢【参考方案5】:另一种方法是利用 oracle 的 INSERT ALL
语法,
INSERT ALL
INTO table1(email, campaign_id) VALUES (email, campaign_id)
WITH source_data AS
(SELECT 'mom@cox.net' email,100 campaign_id
FROM dual
UNION ALL
SELECT 'dad@cox.com' email,200 campaign_id
FROM dual)
SELECT email
,campaign_id
FROM source_data src
WHERE NOT EXISTS (SELECT 1
FROM table1 dest
WHERE src.email = dest.email
AND src.campaign_id = dest.campaign_id);
INSERT ALL
还允许我们基于子查询作为源对多个表执行条件插入。
有一些非常干净和很好的例子可供参考。
-
oracletutorial.com
oracle-base.com/
【讨论】:
以上是关于oracle insert if not exists 语句的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 当记录不存在时插入(insert if not exists)
MySQL atomic insert-if-not-exists 具有稳定的自动增量
MySQL 当记录不存在时插入(insert if not exists)
INSERT IF NOT EXISTS 类型函数供我在不将列转换为主键的情况下使用?
错误代码: 1449 The user specified as a definer ('root'@'%') does not exi