如果 oracle 不存在则插入

Insert if not exits oracle

我想在 table 中插入一条记录,以防它不存在。

INSERT INTO table
(column1, column2, column3, column4, column5, column6)
 SELECT re.column1, re.column2, re.column3, re.column4
  FROM RECEPCION_ELEMENTOS re
 WHERE NOT EXISTS (SELECT 1
                 FROM table re2
                WHERE re.column1 = re2.column1
                  AND re.column2 = re2.column2
                  AND re.column3 = re2.column3
                  AND re.column4 = re2.column4);

在互联网上搜索,我已经建立了这个查询但它不起作用,我收到这个错误

Error SQL: ORA-00947: no hay suficientes valores
00947. 00000 -  "not enough values"

并且此查询缺少“VALUES”。这是正确的吗?

有帮助吗?

存在的逻辑对我来说实际上看起来完全有效。问题是您的插入指定了 6 个目标列,但您的 select 只提供了 4 个列。也许以下其中一项是您打算在此处执行的操作:

INSERT INTO table (column1, column2, column3, column4, column5, column6)
SELECT re.column1, re.column2, re.column3, re.column4, re.column5, re.column6
FROM RECEPCION_ELEMENTOS re

INSERT INTO table (column1, column2, column3, column4)
SELECT re.column1, re.column2, re.column3, re.column4
FROM RECEPCION_ELEMENTOS re

您仍然必须使用逻辑(select 中有 6 列)。如果使用 select 中较少的列,则会抛出错误

INSERT INTO table
(column1, column2, column3, column4, column5, column6)
 SELECT re.column1, re.column2, re.column3, re.column4,re.column5,re.column6
  FROM RECEPCION_ELEMENTOS re
 WHERE NOT EXISTS (SELECT 1
                 FROM table re2
        WHERE re.column1 = re2.column1
         AND re.column2 = re2.column2
         AND re.column3 = re2.column3
         AND re.column4 = re2.column4);

查看演示 - https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=ec9b36db802c7e2691b53edc994cbbb6

另一件事,希望您实际上没有使用“table”作为您的 table 名称(这是一个保留关键字),因此建议使用其他名称。在我的演示中,我使用了“Tab”来代替。