如果记录不存在,则插入SQL bullk

时间:2017-12-13 02:10:45

标签: sql oracle bulkinsert

作为构建的一部分,我正在更改一些.sql文件。就像现在一样,查询从表中删除特定记录并在安装期间重新添加它们。我们想要的是检查,看看是否存在某些记录。如果他们是,什么也不做,但如果他们不执行约30次插入。

这些是.sql文件,我似乎无法正确使用语法。我认为应该是

IF (SELECT COUNT(*) FROM foo WHERE x = bar) <= 0 THEN BEGIN Insert statements... END END IF;

但这似乎并不适合我。我还看了一下IF NOT EXISTS,但那也没有奏效。我不相信的MERGE命令在这里是相关的,因为我不是从单独的表中提取,只是硬编码的插入语句。我正在使用Oracle SQL开发人员,我错过了什么?

解决 这对我有用:

insert into table (col1, col2) 
select 'val1','val2'
from dual
where not exists(select * 
                 from table
                 where (col1 ="val1" and col2='val2'));

2 个答案:

答案 0 :(得分:0)

像这样的东西(我没有oracle方便)

INSERT INTO TABLE (PK, COl2, Col3)
SELECT 1, 'X', 'Y' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM TABLE WHERE PK = 1);

仅选择返回记录不存在的记录(在PK列上匹配)

您可以为每条记录执行其中一项,也可以执行以下操作:

INSERT INTO TABLE (PK, COl2, Col3)
SELECT 1, 'X', 'Y' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM TABLE WHERE PK = 1)
UNION ALL
SELECT 2, 'X', 'Y' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM TABLE WHERE PK = 2);
UNION ALL
SELECT 3, 'X', 'Y' FROM DUAL
WHERE NOT EXISTS (SELECT * FROM TABLE WHERE PK = 3);

对于六个记录(可以从Excel公式生成),这可能没问题。

答案 1 :(得分:0)

如果这样的IF语句我们不能使用SQL:

IF (SELECT COUNT(*) FROM foo WHERE x = bar) <= 0

所以你需要做的是执行计数然后测试它

SELECT COUNT(*) 
into v_count
FROM foo WHERE x = bar;

if v_count <= 0
THEN 
BEGIN
Insert statements... 
END;
END IF;