【问题标题】:Use sequence number with insert select将序列号与插入选择一起使用
【发布时间】:2015-07-05 21:16:29
【问题描述】:

我正在尝试执行以下语句:

INSERT INTO mySchema.ODI_PRICELIST_THREAD_TABLE
(
     src_table,
     thread_id,
     creation_date
)
    SELECT DISTINCT
           source_table AS src_table,
           num_thread_seq.nextval AS THREAD_ID,
           create_date AS CREATION_DATE
      FROM mySchema.nb_pricelist_ctrl

我需要THREAD_ID 字段是从 1 到 X 的数字,其中 X 在运行时定义,因此我使用了从 1 到 X 的序列(我正在使用 ODI)。 但是,我一直有 ORA-02287 Sequence not allowed 错误...

我已阅读this 问题,但我仍然不知道如何解决我的问题。 我一直在寻找,但我没有找到解决方案。请帮忙

【问题讨论】:

    标签: oracle sequence


    【解决方案1】:

    关键字distinct与序列查询不兼容。如果您真的需要它,请尝试类似

    INSERT INTO mySchema.ODI_PRICELIST_THREAD_TABLE (
     src_table,
     thread_id,
     creation_date)
    select 
      a.src_table,
      num_thread_seq.nextval,
      a.create_date
    from
      (select distinct src_table, create_date from mySchema.nb_pricelist_ctrl) a
    

    【讨论】:

    • 这并不重要。我将添加插入以消除歧义。
    【解决方案2】:

    来自 OraFaq:

    以下是不能使用序列的情况:

    对于 SELECT 语句:

    • 在 WHERE 子句中
    • 在 GROUP BY 或 ORDER BY 子句中
    • 在 DISTINCT 子句中
    • 与 UNION 或 INTERSECT 或 MINUS 一起使用
    • 在子查询中

    http://www.orafaq.com/wiki/ORA-02287

    【讨论】:

      【解决方案3】:

      试试这个

      INSERT INTO mySchema.ODI_PRICELIST_THREAD_TABLE
      (
           src_table,
           thread_id,
           creation_date
      )
          SELECT DISTINCT
                 source_table AS src_table,
                 num_thread_seq.nextval() AS THREAD_ID,
                 create_date AS CREATION_DATE
            FROM mySchema.nb_pricelist_ctrl
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-25
        • 2020-08-03
        • 2013-03-25
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        相关资源
        最近更新 更多