使用序列号和插入选择

时间:2015-04-27 12:12:17

标签: oracle sequence

我试图执行以下声明:

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个问题,但我仍然无法解决如何解决问题的方法。 我一直在寻找,但我没有找到解决方案的运气。请帮忙

3 个答案:

答案 0 :(得分:1)

来自OraFaq:

以下是您无法使用序列的情况:

  

对于SELECT语句:

     
      
  • 在WHERE子句中
  •   
  • 在GROUP BY或ORDER BY子句中
  •   
  • 在DISTINCT条款中
  •   
  • 连同UNION或INTERSECT或MINUS
  •   
  • 在子查询中
  •   

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

答案 1 :(得分: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 :(得分:0)

试试这个

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