本文内容取自百度文库
连接地址:https://wenku.baidu.com/view/c94f67df195f312b3169a558.html
oracle 更新操作的5种方式:
1.标准update 语法:
UPDATE TABLE_NAME SET COL_NAME=? WHERE COL_NAME=?;
例如:update table1 set name=‘小三’ where id=11;
2.inline view 更新法:
UPDATE (SELECT......) SET COL_NAME=?;
注:只是将 标准语法中确定的表变成了 通过select 语句查询到的一个临时视图
3.merge 更新法(oracle 特有语句)
MERGE INTO TABLE_NAME A
USING(TABLE|VIEW|SUB_QUERY) B
ON(连接条件 A.COL=B.COL.....)
WHEN MATCHED THEN
UPDATE A SET COL1=?
WHEN NOT MATCHED THEN
INSERT(COL.....) VALUES(?.....);
4.快速游标更新法
BEGIN
FOR CR IN (查询语句) LOOP --循环
--更新语句
END LOOP; --结束循环
END;
oracle 支持快速游标:不需要定义直接把游标写道for循环中
例子:
BEGIN
FOR CR IN (SELECT A.ROWID,B.JOIN_STAATE FROM
T_JOIN_SITUATION A,T_PEOPLE_INFO B
WHERE A.PEOPLE_NUMBER=B.PEOPLE_NUMBER
AND A.YEAR='2011' AND A.CITY_NUMBER='M0000' AND A.TOWN_NUMBER='M1500') LOOP
UPDATE T_JOIN_SITUATION SET JOIN_STATE=CR.JOIN_STATE WHERE ROWID=CR_ROWID;
END LOOP;
END;
比较:
标准update:做单表更新或简单的语句采用此方案更优;
inline view:做2表关联且被更新表通过关联主键关联,采用此法更优;
merge:做2表关联且被跟新表不是通过关联主键关联的、更新需要进行多条件判断的,采用此法更优;
快速游标更新法:多表关联逻辑复杂的,采用此法更优;