admin

如何将多个带有序列值的行插入到oracle中?

sql

我知道,如果我在此答案中使用语法,则可以使用一条语句插入多行。

在Oracle中,要将具有列col1,col2和col3的多行插入表t中,可以使用以下语法:

INSERT ALL
   INTO t (col1, col2, col3) VALUES ('val1_1', 'val1_2', 'val1_3')
   INTO t (col1, col2, col3) VALUES ('val2_1', 'val2_2', 'val2_3')
   INTO t (col1, col2, col3) VALUES ('val3_1', 'val3_2', 'val3_3')
   .
   .
   .
SELECT 1 FROM DUAL;

但是,我要插入的值之一取自一个序列,即

insert into TABLE_NAME
(COL1,COL2)
select MY_SEQ.nextval,'some value' from dual
union all
select MY_SEQ.nextval,'another value' from dual
;

如果尝试运行它,则会收到ORA-02287错误。有什么办法解决这个问题,还是我应该只使用很多INSERT语句?

编辑:
如果我必须为序列以外的所有其他列指定列名,那么我会失去原来的简洁性,所以这是不值得的。在这种情况下,我将只使用多个INSERT语句。


阅读 140

收藏
2021-05-10

共1个答案

admin

这有效:

insert into TABLE_NAME (COL1,COL2)
select my_seq.nextval, a
from
(SELECT 'SOME VALUE' as a FROM DUAL
 UNION ALL
 SELECT 'ANOTHER VALUE' FROM DUAL)
2021-05-10