如何使用序列值将多行插入oracle?

Ove*_*esh 43 sql oracle

我知道如果我使用这个答案中的语法,我可以使用单个语句插入多行.

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

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

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

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

WW.*_*WW. 41

这有效:

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)
Run Code Online (Sandbox Code Playgroud)


Dil*_*aev 24

它不起作用,因为序列在以下场景中不起作用:

  • 在WHERE子句中
  • 在GROUP BY或ORDER BY子句中
  • 在DISTINCT子句中
  • 与UNION或INTERSECT或MINUS一起使用
  • 在子查询中

资料来源:http://www.orafaq.com/wiki/ORA-02287

但这确实有效:

insert into table_name
            (col1, col2)
  select my_seq.nextval, inner_view.*
    from (select 'some value' someval
            from dual
          union all
          select 'another value' someval
            from dual) inner_view;
Run Code Online (Sandbox Code Playgroud)

试试看:

create table table_name(col1 varchar2(100), col2 varchar2(100));

create sequence vcert.my_seq
start with 1
increment by 1
minvalue 0;

select * from  table_name;
Run Code Online (Sandbox Code Playgroud)