Oracle執(zhí)行Update語句的幾種方式
Oracle沒有update from語法,可以通過四種寫法實(shí)現(xiàn)同樣的功能:
一、標(biāo)準(zhǔn)update語法(常用、速度可能最慢)
當(dāng)更新的表示單個(gè)或者被更新的字段不需要關(guān)聯(lián)表帶過來,此法是最好的選擇。
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)來關(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特有的語句,語法如下:
MERGE INTO table_name alias1 --主表,即需要被修改的表 USING (table | view | sub_query) alias2 --從表,即來源表 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出來的數(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í),效率很高)
語法:
begin for cr in (查詢語句) loop --循環(huán) update table_name set ... --更新語句(根據(jù)查詢出來的結(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)文章
Oracle 子程序參數(shù)模式,IN,OUT,NOCOPY
Oracle 子程序參數(shù)模式主要有IN,OUT,NOCOPY,IN和OUT可以組合,OUT和NOCOPY也可以組合使用.2009-10-10
與虛擬機(jī)Oracle連接出現(xiàn)ora-12154問題的解決方法
這篇文章主要介紹了與虛擬機(jī)Oracle連接出現(xiàn)ora-12154問題的解決方法,需要的朋友可以參考下2017-03-03
win10 oracle11g安裝報(bào)錯(cuò)問題集合 附解決方法
這篇文章主要為大家總結(jié)了win10 oracle11g安裝報(bào)錯(cuò)問題的產(chǎn)生原因,和oracle安裝報(bào)錯(cuò)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Linux系統(tǒng)下啟動(dòng)/關(guān)閉Oracle數(shù)據(jù)庫
在Linux系統(tǒng)上開啟關(guān)閉Oracle數(shù)據(jù)庫是一個(gè)常見的任務(wù),可以通過多種方法來實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)下啟動(dòng)/關(guān)閉Oracle數(shù)據(jù)庫的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07

