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