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

ORA-02287: sequence number not allowed here

我试图将数据从一个 table 插入到另一个 table 并使用一个序列,但我在 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;

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

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

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

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

  • 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
    
  • 当我尝试在 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;