ORACLE开发:Oracle执行Update语句的几种方式

Oracle没有update from语法,可以通过四种写法实现同样的功能:

一、标准update语法(常用、速度可能最慢)

当更新的表示单个或者被更新的字段不需要关联表带过来,此法是最好的选择。

update a
set a.c2= (select b.c2from b where a.c1=b.c1)
where exists (select 1 from b where a.c1=b.c1)

二、内联视图更新(关联主键字段,速度较快)

inline view更新法就是更新一个临时建立的视图。

方案:更新一个临时建立的视图。要求B表的主键字段必须在where条件中,并且是以=号来关联被更新表。

update (select a.c2 as ac2,b.c2 as bc2 from a, b where a.c1=b.c1 and a.c3=’2011′) as M
set ac2=bc2

三、merge更新法 (关联字段非主键时,速度较快)

merge是oracle特有的语句,语法如下:

MERGE INTO table_name alias1 –主表,即需要被修改的表
USING (table | view | sub_query) alias2 –从表,即来源表
ON (join condition) –连接条件
WHEN MATCHED THEN –在匹配的记录中进行
UPDATE table_name SET col1 = col_val1, col2 = col2_val –更改主表信息
WHEN NOT MATCHED THEN –在不匹配的情况下,筛选从表记录插入到主表【可选】
INSERT (column_list) VALUES (column_values);

原理分析:在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就对alias1表进行更新的操作(Update),如果不匹配,就对alias1表进行插入操作(Insert)。

执行merge不会返回影响的行数,最多只能两个表关联。

merge into a
using b
on (a.c1=b.c1 and a.c3=’2011′)
when matched then
update a.c2=b.c2

四、快速游标更新法(复杂逻辑时,效率很高)

语法:

begin
for cr in (查询语句) loop –循环
update table_name set … –更新语句(根据查询出来的结果集合)
end loop; –结束循环
end;
begin
for cur in (select a.rowid ,b.c2 from a, b where a.c1=b.c1 and a.c3=’2011′ ) loop
UPDATE a set c2=cur.c2 where rowid=cur.rowid;
end loop;
end;

Oracle没有update from语法,可以通过四种写法实现同样的功能:

一、标准update语法(常用、速度可能最慢)

当更新的表示单个或者被更新的字段不需要关联表带过来,此法是最好的选择。

update a
set a.c2= (select b.c2from b where a.c1=b.c1)
where exists (select 1 from b where a.c1=b.c1)

二、内联视图更新(关联主键字段,速度较快)

inline view更新法就是更新一个临时建立的视图。

方案:更新一个临时建立的视图。要求B表的主键字段必须在where条件中,并且是以=号来关联被更新表。

update (select a.c2 as ac2,b.c2 as bc2 from a, b where a.c1=b.c1 and a.c3=’2011′) as M
set ac2=bc2

三、merge更新法 (关联字段非主键时,速度较快)

merge是oracle特有的语句,语法如下:

MERGE INTO table_name alias1 –主表,即需要被修改的表
USING (table | view | sub_query) alias2 –从表,即来源表
ON (join condition) –连接条件
WHEN MATCHED THEN –在匹配的记录中进行
UPDATE table_name SET col1 = col_val1, col2 = col2_val –更改主表信息
WHEN NOT MATCHED THEN –在不匹配的情况下,筛选从表记录插入到主表【可选】
INSERT (column_list) VALUES (column_values);

原理分析:在alias2中Select出来的数据,每一条都跟alias1进行 ON (join condition)的比较,如果匹配,就对alias1表进行更新的操作(Update),如果不匹配,就对alias1表进行插入操作(Insert)。

执行merge不会返回影响的行数,最多只能两个表关联。

merge into a
using b
on (a.c1=b.c1 and a.c3=’2011′)
when matched then
update a.c2=b.c2

四、快速游标更新法(复杂逻辑时,效率很高)

语法:

begin
for cr in (查询语句) loop –循环
update table_name set … –更新语句(根据查询出来的结果集合)
end loop; –结束循环
end;
begin
for cur in (select a.rowid ,b.c2 from a, b where a.c1=b.c1 and a.c3=’2011′ ) loop
UPDATE a set c2=cur.c2 where rowid=cur.rowid;
end loop;
end;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


数据运维技术 » ORACLE开发:Oracle执行Update语句的几种方式