使用序列号插入 select

Use sequence number with insert select

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

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 序列不允许错误...

我已经阅读了 this 个问题,但我仍然不知道如何解决我的问题。 我一直在搜索,但我没有找到解决方案的运气。请帮助

来自 OraFaq:

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

For a SELECT Statement:

  • In a WHERE clause
  • In a GROUP BY or ORDER BY clause
  • In a DISTINCT clause
  • Along with a UNION or INTERSECT or MINUS
  • In a sub-query

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

关键字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

试试这个

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