欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle執(zhí)行Update語(yǔ)句的幾種方式

 更新時(shí)間:2022年05月05日 14:46:54   作者:springsnow  
這篇文章介紹了Oracle執(zhí)行Update語(yǔ)句的幾種方式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Oracle沒(méi)有update from語(yǔ)法,可以通過(guò)四種寫法實(shí)現(xiàn)同樣的功能:

一、標(biāo)準(zhǔn)update語(yǔ)法(常用、速度可能最慢)

當(dāng)更新的表示單個(gè)或者被更新的字段不需要關(guān)聯(lián)表帶過(guò)來(lái),此法是最好的選擇。

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)

二、內(nèi)聯(lián)視圖更新(關(guān)聯(lián)主鍵字段,速度較快)

inline view更新法就是更新一個(gè)臨時(shí)建立的視圖。

方案:更新一個(gè)臨時(shí)建立的視圖。要求B表的主鍵字段必須在where條件中,并且是以=號(hào)來(lái)關(guān)聯(lián)被更新表。

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更新法 (關(guān)聯(lián)字段非主鍵時(shí),速度較快)

merge是oracle特有的語(yǔ)句,語(yǔ)法如下:

MERGE INTO table_name alias1 --主表,即需要被修改的表
USING (table | view | sub_query) alias2 --從表,即來(lái)源表
ON (join condition) --連接條件
WHEN MATCHED THEN --在匹配的記錄中進(jìn)行
  UPDATE table_name SET col1 = col_val1, col2 = col2_val --更改主表信息
WHEN NOT MATCHED THEN --在不匹配的情況下,篩選從表記錄插入到主表【可選】
  INSERT (column_list) VALUES (column_values);

原理分析:在alias2中Select出來(lái)的數(shù)據(jù),每一條都跟alias1進(jìn)行 ON (join condition)的比較,如果匹配,就對(duì)alias1表進(jìn)行更新的操作(Update),如果不匹配,就對(duì)alias1表進(jìn)行插入操作(Insert)。

執(zhí)行merge不會(huì)返回影響的行數(shù),最多只能兩個(gè)表關(guān)聯(lián)。

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

四、快速游標(biāo)更新法(復(fù)雜邏輯時(shí),效率很高)

語(yǔ)法:

begin
for cr in (查詢語(yǔ)句) loop  --循環(huán)
update table_name set ...   --更新語(yǔ)句(根據(jù)查詢出來(lái)的結(jié)果集合)
end loop;  --結(jié)束循環(huán)
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;

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論