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 BY
或 ORDER BY
子句中
在 DISTINCT
子句中
连同 UNION
或 INTERSECT
或 MINUS
在子查询中
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;
我试图将数据从一个 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 BY
或 ORDER BY
子句中
DISTINCT
子句中
UNION
或 INTERSECT
或 MINUS
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;