作为构建的一部分,我正在更改一些.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'));
答案 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;