首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

update联系关系更新在sqlserver和oracle中的实现[转]

2012-12-19 
update关联更新在sqlserver和oracle中的实现[转]from: http://www.webjx.com/htmldata/2006-01-19/1137630

update关联更新在sqlserver和oracle中的实现[转]

from: http://www.webjx.com/htmldata/2006-01-19/1137630095.html

from: http://www.blogjava.net/pts/archive/2010/11/25/339053.html

?

sqlserver和oracle中实现update关联更新的语法不同,都可以通过inline view(内嵌视图)来实现,总的来说sqlserver更简单些. 测试例子如下:create table tmp_a(cpcode varchar2(10),sb_ym varchar2(6),flag char(1));create table tmp_b(cpcode varchar2(10),sb_ym varchar2(6),flag char(1));insert into tmp_a(cpcode,sb_ym,flag)values('3201910001','200406','e');insert into tmp_a(cpcode,sb_ym,flag)values('3201910002','200406','e');insert into tmp_b(cpcode,sb_ym,flag)values('3201910001','200406','r');insert into tmp_b(cpcode,sb_ym,flag)values('3201910002','200406','r');insert into tmp_b(cpcode,sb_ym,flag)values('3201910003','200406','r');insert into tmp_b(cpcode,sb_ym,flag)values('3201910004','200406','e');commit;在SQLSERVER中:update tmp_b set flag = b.flang from tmp_a a,tmp_b b where a.cpcode =b.cpcode and a.sb_ym = b.sb_ym;在Oracle中:方法一:(效率低)update tmp_b aset flag = (select flag from tmp_a bwhere a.cpcode = b.cpcode and a.sb_ym = b.sb_ym ) where exists (select * from tmp_a c where a.cpcode = c.cpcode and a.sb_ym = c.sb_ym);Statistics----------------------8 recursive calls3 db block gets18 consistent gets0 physical reads0 redo size方法二:(效率高)alter table tmp_a add constraint p_tmp_a primary key (cpcode, sb_ym);update (select b.flag flagb,a.flag flaga from tmp_a a,tmp_b b where a.cpcode=b.cpcode and a.sb_ym=b.sb_ym) set flagb=flaga;Statistics----------------------0 recursive calls3 db block gets7 consistent gets0 physical reads0 redo size注意:方法二中数据源表必须要加上主键,否则会报错 ORA-01779: 无法修改与非键值保存表对应的列被修改的表则无需增加主键

?

热点排行