日期:2014-05-17  浏览次数:21078 次

pl/sql中使用insert into select复制一个表,并且主键使用序列生成的值?
就是从另外一个表中复制几个字段的值到当前表,但是当前表的主键值使用序列生成,这个语句该怎么写?
SQL code

insert into bt_field_enum(fld_enum_id,fld_exp_id,parent_enum_value,enum_value,enum_name,
enum_level,enum_desc,enum_status,use_frequency,enum_order) values select (select seq_fld_enum_id.nexval from dual) as fld_enum_id,205,parent_enum_value,enum_value,enum_name,enum_level,enum_desc,enum_status,
use_frequency,enum_order from jsyd.t_field_enum



大家看我这个语句,报错为“ORA-00936 缺失表达式”

------解决方案--------------------
insert into bt_field_enum(fld_enum_id,fld_exp_id,parent_enum_value,enum_value,enum_name,
enum_level,enum_desc,enum_status,use_frequency,enum_order) select seq_fld_enum_id.nexval as ,205,parent_enum_value,enum_value,enum_name,enum_level,enum_desc,enum_status,
use_frequency,enum_order from jsyd.t_field_enum


INSERT INTO的时候,可以直接使用SELECT ,不使用VALUES



------解决方案--------------------
不需要用子查询,直接 seq_fld_enum_id.nexval 就可以了。
------解决方案--------------------
insert into bt_field_enum
(fld_enum_id,fld_exp_id,parent_enum_value,enum_value,enum_name,
enum_level,enum_desc,enum_status,use_frequency,enum_order)
select seq_fld_enum_id.nexval,205,parent_enum_value,enum_value,enum_name,enum_level,enum_desc,enum_status,
use_frequency,enum_order from jsyd.t_field_enum
------解决方案--------------------
看看这个,自己测试下
insert into bt_field_enum(fld_enum_id,fld_exp_id,parent_enum_value,enum_value,enum_name,
enum_level,enum_desc,enum_status,use_frequency,enum_order) 
select seq_fld_enum_id.nexval,205,parent_enum_value,enum_value,enum_name,
enum_level,enum_desc,enum_status,use_frequency,enum_order 
from (select parent_enum_value,enum_value,enum_name,enum_level,enum_desc,enum_status,
use_frequency,enum_order 
from jsyd.t_field_enum);