ORA-02287:此处不允许使用序列号

时间:2016-12-15 01:45:38

标签: sql oracle oracle12c

我尝试将数据从一个表插入到另一个表中并使用序列,但我在Oracle 12c上获得了此处不允许的序列错误。

INSERT INTO table_a
(a,b,c,d)
    SELECT
        schema.table_a_seq.nextval,
        t.col1,
        t.col2,
        t.col3
    FROM
        (
            SELECT col1, col2, col3 FROM table_b
        )t;

2 个答案:

答案 0 :(得分:2)

我无法重现错误,但我已将您的查询更改为 -

INSERT INTO table_a 
SELECT table_a_seq.nextval, t.* 
FROM (SELECT col1 FROM table_b) t;

它对我来说很好。您可能错过了查询的某些部分以包含在问题中。

如果您使用ORA-02287语句的以下部分中的序列,则可以引发SELECT

  • WHERE条款中
  • GROUP BYORDER BY条款中
  • DISTINCT条款中
  • UNIONINTERSECTMINUS一起使用
  • 在子查询

    参考:OraFAQ:ORA-02287

    SQL> desc table_a
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     COL1                                               NUMBER
     COL2                                               NUMBER
    
    SQL> desc table_b
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     COL1                                               NUMBER
     COL2                                               NUMBER
    
    SQL> select * from table_a;
    
    no rows selected
    
    SQL> select * from table_b;
    
          COL1       COL2
    ---------- ----------
             2          3
             4          5
    
    
    SQL> INSERT INTO table_a SELECT table_a_seq.nextval, t.* FROM (SELECT col1 FROM table_b) t;
    
    2 rows created.
    
    SQL> select * from table_a;
    
          COL1       COL2
    ---------- ----------
             3          2
             4          4
    
  • 答案 1 :(得分:0)

    当我尝试在SQL查询中的每个对象之前使用模式名称时,我没有看到错误。

    INSERT INTO schema.table_a
    (a,b,c,d)
    SELECT
        schema.table_a_seq.nextval,
        t.col1,
        t.col2,
        t.col3
    FROM
        (
            SELECT col1, col2, col3 FROM schema.table_b
        )t;