如何在Oracle中进行有条件插入?

14

我在这里读到,语法看起来是这样的:

INSERT
WHEN ([Condition]) THEN
INTO [TableName] ([ColumnName])
VALUES ([VALUES])
ELSE
INTO [TableName] ([ColumnName])
VALUES ([VALUES])
SELECT [ColumnName] FROM [TableName];

但我不想从另一个表提供值,我只是想手动输入它们,所以我有:

INSERT 
WHEN EXISTS (SELECT 1 FROM FOO WHERE NAME = 'JOE') 
THEN
INTO BAR (NAME, AGE) 
VALUES ('JOE', 50)

这将产生异常:ORA-00928:缺少SELECT关键字。

如果在另一个表中找到给定的值,我想执行插入操作。


我认为你只能在PL/SQL过程中使用它,而不能在普通的SQL语句中使用。WHEN子句不是SQL INSERT子句的一部分:https://docs.oracle.com/database/121/SQLRF/statements_9014.htm#SQLRF01604 - user330315
2个回答

16

select 一起使用是有效的。你的查询没有生效是因为在有条件插入时存在 values 关键字问题。

INSERT 
WHEN EXISTS (SELECT 1 FROM FOO WHERE NAME = 'JOE') 
THEN
INTO BAR (NAME, AGE) 
SELECT 'JOE', 50 FROM DUAL

5

所以,我找到了一种间接的方法在这里,解决方案如下:

INSERT INTO BAR (NAME, AGE) 
SELECT 'JOE', 50
  FROM DUAL
 WHERE EXISTS (SELECT 1 FROM FOO WHERE NAME = 'JOE')

但是它并没有解释为什么我必须在INSERT WHEN语句中使用SELECT语句。

我认为这是因为该系统依赖于INSERT在所依赖的SELECT返回无结果时中止。 - Nyerguds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接