我有这个条件INSERT INTO使用SELECT' WHERE NOT'失败了。我通过尝试按照我在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
答案 0 :(得分:4)
由于缺少from
子句,外部查询的语法不正确。尽管您仅使用文字值,但仍需指定。 Oracle为此提供了“双重”表:
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记录存在,则该语句将失败。