当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何使用序列值将多行插入oracle?》经验,为你挑选了2个好方法。

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

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

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语句.



1> WW...:

这有效:

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)



2> Dilshod Tadj..:

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

在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;

试试看:

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;

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有