我知道如果我使用这个答案中的语法,我可以使用单个语句插入多行.
但是,我插入的值之一取自序列,即
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
它不起作用,因为序列在以下场景中不起作用:
资料来源: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)
归档时间: |
|
查看次数: |
156237 次 |
最近记录: |