在我们的系统中,有大量这样的需求:把表goods中的数据,move到表spec_goods中.
(两个表的列是相同的).一般来说,我们知道,最标准的写法是这样的:
insert into spec_goods(c1,c2,c3) select c1,c2,c3 from goods where c3='A';
但我们系统中,这样的表很多,每个表的列也很多,基本全部都有这样的需求,按这样的方法去写,什么时候是个尽头?
所以想起了本科的数据库教材,王姗编的那本绿皮书上说过select into的语法,所以试了
select into spec_goods from goods where c3='A';
结果有两种:
1)sybase上,该语句会新建表spec_goods,如果该表已经存在,则报错
2)oracle上,该语句报语法错
那就考虑另外的办法吧,下面的语句可以实现同样的功能:
insert into spec_goods select * from goods where c3='A';
这条语句有特殊要求:
要求表spec_goods和表goods在建表时列都顺序完全相同.
在sybase中,还有一种简化的办法:
insert into spec_goods(c1,c2,c3) from goods where c3='A';
这个语法在其它数据库中不一定能行,oracle就不可以.