【问题标题】:ORA-00913 in sql querysql 查询中的 ORA-00913
【发布时间】:2021-09-10 11:31:53
【问题描述】:

我正在使用 Oracle SQL,我正在尝试运行以下查询:

    INSERT
INTO data_mapp_info
  (
    data_mapp_info_id,
    data_mapp_camp_id,
    data_mapp_info,
    data_mapp_info_regs,
    dt_first,
    dt_ult_modf,
    user_ult_modf
  )
  VALUES
  (
    (SELECT MAX(data_mapp_info_id)+1 AS data_mapp_info_id
      FROM MAPP.DATA_MAPP_INFO
    )
    ,
    77,
    'Value 1',
    (SELECT MAX(data_mapp_info_regs),
      CASE data_mapp_info_regs
        WHEN NULL
        THEN 1
        ELSE MAX(data_mapp_info_regs)+1
      END
    FROM MAPP_SOA.DATA_MAPP_info
    WHERE data_mapp_camp_id = 77
    ),
    sysdate,
    sysdate,
    'user.name'
  ) ;

对于 data_mapp_info_regs 的值,如果它是 NULL,我试图设置为 1,如果它是前一个最大值加一已设置的索引 data_mapp_camp_id 存在。但我收到错误 ORA-00913: "too many values"

如何修复此查询?

【问题讨论】:

    标签: sql oracle subquery sql-insert


    【解决方案1】:

    在我看来,第二个子查询应该修改成这样:

    INSERT INTO data_mapp_info (data_mapp_info_id,
                                data_mapp_camp_id,
                                data_mapp_info,
                                data_mapp_info_regs,
                                dt_first,
                                dt_ult_modf,
                                user_ult_modf)
            VALUES (
                      (SELECT MAX (data_mapp_info_id) + 1 AS data_mapp_info_id
                         FROM MAPP.DATA_MAPP_INFO),
                      77,
                      'Value 1',
                      -- This subquery should be modified
                      (SELECT NVL (MAX (data_mapp_info_regs), 0) + 1
                         FROM MAPP_SOA.DATA_MAPP_info
                        WHERE data_mapp_camp_id = 77),
                      --
                      SYSDATE,
                      SYSDATE,
                      'user.name');
    

    【讨论】:

    • 有效!非常非常感谢你。我还不知道这个 NVL 功能。再次感谢你! =^^=
    【解决方案2】:

    这部分查询返回两个值,您只能返回一个值,因为它对应于您要插入的表中的单个列:

    (SELECT MAX(data_mapp_info_regs),
          CASE data_mapp_info_regs
            WHEN NULL
            THEN 1
            ELSE MAX(data_mapp_info_regs)+1
          END
        FROM MAPP_SOA.DATA_MAPP_info
        WHERE data_mapp_camp_id = 77
        ),
    

    【讨论】:

    • 我对SQL不是很了解,这个查询是根据已有的写的。请你帮我修一下,所以这部分只能返回一个值吗? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多