使用 SELECT 'WHERE NOT' 的条件 INSERT INTO 失败

Conditional INSERT INTO using SELECT 'WHERE NOT' fails

我使用 SELECT 'WHERE NOT' 的条件 INSERT INTO 失败了。我通过尝试遵循我在 Google 上找到的声称它们有效的示例来获得此语法。我无法找出语法错误的地方,除非不支持我正在做的事情?

INSERT INTO ENV (ENV_ID, ENV_NAME, SSO_URL, ENV_NAME_LOWER)
SELECT '99', 'Blah', 'https://blah.com:443', 'production'
WHERE NOT EXISTS (SELECT 1 FROM ENV WHERE ENV_ID = '99');

这是我在 Oracle 中遇到的错误:

Error at Command Line : 3 Column : 1
Error report -
SQL Error: ORA-00923: FROM keyword not found where expected
00923. 00000 -  "FROM keyword not found where expected"

更新: 得到了满意的答案,但由于另一个错误无法完全正常工作:ORA-54013: INSERT operation disallowed on virtual columns

由于缺少 from 子句,外部查询的语法不正确。尽管您仅使用文字值,但仍需要指定。 Oracle为此提供了'dual'table:

INSERT INTO ENV (ENV_ID, ENV_NAME, SSO_URL, ENV_NAME_LOWER)
     SELECT '99', 'Blah', 'https://blah.com:443', 'production'
       FROM DUAL
      WHERE NOT EXISTS (SELECT 1 FROM ENV WHERE ENV_ID = '99')
          ;

如果测试的 env 记录存在,则语句将失败。