我尝试将数据从一个表插入到另一个表中并使用序列,但我在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;
答案 0 :(得分:2)
我无法重现错误,但我已将您的查询更改为 -
INSERT INTO table_a
SELECT table_a_seq.nextval, t.*
FROM (SELECT col1 FROM table_b) t;
它对我来说很好。您可能错过了查询的某些部分以包含在问题中。
如果您使用ORA-02287
语句的以下部分中的序列,则可以引发SELECT
。
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
答案 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;