我知道如果我使用这个答案中的语法,我可以使用单个语句插入多行.
但是,我插入的值之一取自序列,即
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语句.
这有效:
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)
它不起作用,因为序列在以下场景中不起作用:
在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;