Sql 如何在Oracle中有条件地插入?

Sql 如何在Oracle中有条件地插入?,sql,oracle,Sql,Oracle,我读过这样的语法: 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 FO

我读过这样的语法:

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关键字


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

因此,我找到了一种间接的方法,我的问题的解决方案是:

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

但它并没有解释为什么在运行SELECT时必须在
INSERT中使用
SELECT
语句。但是values关键字有一个问题

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

我认为只能在PL/SQL过程中使用,而不能在普通SQL中使用。
WHEN
子句不是SQL INSERT子句的一部分:我假设这是因为该系统依赖于
INSERT
在它依赖的
SELECT
没有返回结果时中止。