【问题标题】:Combined INSERT SELECT Oracle-Query does not work组合 INSERT SELECT Oracle-Query 不起作用
【发布时间】:2020-07-15 12:49:14
【问题描述】:

我有以下查询,通常应该可以,但不适用于我的 Navicat 数据库管理软件:

INSERT INTO TABLE1(ID_NO, COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5, COLUMN6, COLUMN7, COLUMN8, COLUMN9, COLUMN10, COLUMN11, DDATE_IN) VALUES(SELECT ID_NO+1 AS ID_NO FROM ((SELECT MAX( ID_NO ) as ID_NO FROM TABLE GROUP BY ID_NO ORDER BY ID_NO DESC) WHERE ROWNUM = 1), 'Value2', 'Value3', 1, 1, 1, 'Value4', 'Value5', 'Value6', 'Value7', 'Value8', 'Value9', TO_DATE('05.07.2020 10:00:00', 'DD.MM.YYYY HH24:MI:SS'))

SELECT 查询应采用 TABLE1 的现有最高 ID_NO(ID 号)并加 1 并将其写入 INSERT 语句中。因此,ID_NO 必须迭代该表中的每个新 INSERT。

如果我在没有 INSERT 提示的情况下在 Navicat 中将 SELECT 语句编写为单个语句,它可以工作。但我想把它放在 INSERT 提示字符串中。我必须将组合查询放在单个字符串中,因为我使用 C# 代码将 oracle 查询字符串发送到数据库并且仅适用于单个字符串。这里有什么问题?我被卡住了几天,我看不到错误。

编辑:我自己发现了错误。我忘记将 SELECT 语句放入括号中,即放入“()”。我编辑了我的第一篇文章的代码。现在可以了。

【问题讨论】:

    标签: sql oracle max sql-insert navicat


    【解决方案1】:

    SELECT 查询应采用TABLE1 中现有的最高ID_NO(ID 号)并添加1 并将其写入INSERT 语句中。

    您似乎过于复杂了。我认为您想要带有聚合查询的 insert ... select 语法:

    INSERT INTO TABLE1(
        ID_NO, 
        COLUMN1, 
        COLUMN2, 
        COLUMN3, 
        COLUMN4, 
        COLUMN5, 
        COLUMN6, 
        COLUMN7, 
        COLUMN8, 
        COLUMN9, 
        COLUMN10, 
        COLUMN11, 
        DDATE_IN
    ) 
    SELECT 
        COALESCE(MAXID_NO), 0) + 1,
        'Value2', 
        'Value3', 
        1, 
        1, 
        1, 
        'Value4', 
        'Value5', 
        'Value6', 
        'Value7', 
        'Value8', 
        'Value9', 
        TO_DATE('05.07.2020 10:00:00', 'DD.MM.YYYY HH24:MI:SS')
    FROM TABLE1
    

    请注意,这是一种相当低效的方法,因为它需要为每个insert 扫描表。如果您可以忍受间隙,那么使用序列会更简单。

    【讨论】:

    • 我明白了。我忘记将 SELECT 语句设置为括号,即设置为“()”。我编辑了我的代码。该线程可以关闭。现在可以了。对于我的 C# 程序的下一个版本,我尝试按照您的建议使用序列。
    • 欢迎@s950mpc2000。如果我的回答正确回答了您的问题,请点击对号 accept it
    • @GMB:不,它没有。 FROM 语句也在您的 Oracle 命令中的错误位置。它在 NaviCat 中不起作用。我刚刚用括号更改了我的 Oracle 命令。我想将 oracle 命令放在一行中。一行字符串命令,因为我在需要它的 C# 程序中使用它。
    【解决方案2】:

    我明白了。我忘记将 SELECT 语句设置在括号中,即设置为“()”。我编辑了我的代码。现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      • 2016-06-10
      • 2012-08-25
      • 2021-10-27
      相关资源
      最近更新 更多