oracle中,我做了个多条数据插入报错了 
ORA-02287: sequence number not allowed heresql语句如下:
insert into t_fms_dictionary(id,dic_key,dic_lang,DIC_UPDATABLE,DIC_VALUE)   
select seq_dictionary_id.nextval, '1','1' ,'1' ,'1'  from dual  
union all  
select  seq_dictionary_id.nextval , '2','2','2','2' from dual  
union all  
select seq_dictionary_id.nextval , '3','3','3','3' from dual
序列:
DROP SEQUENCE QBET.SEQ_DICTIONARY_ID;
CREATE SEQUENCE QBET.SEQ_DICTIONARY_ID
   START WITH 11161
   MAXVALUE 9999999999999999999999999999
   MINVALUE 1
   NOCYCLE
   CACHE 20
   NOORDER;
------解决方案--------------------不能像你那样。只能一个插入一个查询。
------解决方案--------------------序列不能这样弄,你想要什么效果,考虑换个方式
------解决方案--------------------普通的Insert into 语句一次只能插入一条记录
楼主如果要想一段sql 插多条记录,可以用For循环,在循环中,变量定义为lp
insert into t_fms_dictionary(id,dic_key,dic_lang,DIC_UPDATABLE,DIC_VALUE)  
value (seq_dictionary_id.nextval, lp ,lp ,lp ,lp) --不需要select
如果是想一次插入多条记录,只执行一次插入操作,可以用Forall
Type a_type is record  
  (id number,dic_key varchar2,dic_lang varchar2 ,DIC_UPDATABLE varchar2,DIC_VALUE varchar2);
Type a_table is table of a_type index by BINARY_INTEGER;  
declare
a a_table;
begin
For i in 1..n loop --循环赋值
  a[i].id := seq_dictionary_id.nextval;
  a[i].dic_key:= '';
 .....
end loop;
FORALL i IN a.first .. a.last  一次性插入
     INSERT INTO bs_contract_lotitem VALUES a(i);
end ;
------解决方案--------------------oracle不让这么用。说明如下:
Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in the
following constructs:
■ A subquery in a DELETE, SELECT, or UPDATE statement
■ A query of a view or of a materialized view
■ A SELECT statement with the DISTINCT operator
■ A SELECT statement with a GROUP BY clause or ORDER BY clause  
■ A SELECT statement that is combined with another SELECT statement with the
UNION, INTERSECT, or MINUS set operator
■ The WHERE clause of a SELECT statement
■ The DEFAULT value of a column in a CREATE TABLE or ALTER TABLE statement
■ The condition of a CHECK constrain
------解决方案--------------------不允许这种写法,分开插
------解决方案--------------------被我惊奇的发现这样竟然可以
SQL code
create or replace function get_seq (p_in_sqname in varchar2) return number
is
  l_res number ;
begin
  execute immediate 'select '|| p_in_sqname|| '.nextval from dual' into l_res ;
  return l_res ;
end ;
------解决方案--------------------
請分段執行
------解决方案--------------------
可以试一试,insert into t_fms_dictionary(id,dic_key,dic_lang,DIC_UPDATABLE,DIC_VALUE)  
select  get_seq('seq_dictionary_id'),A.* from (
select  '1','1' ,'1' ,'1' from dual  
union all  
select  '2','2','2','2' from dual  
union all  
select  '3','3','3','3' from dual) A