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



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

    最新更新