Oracle執(zhí)行Update語句的幾種方式
Oracle沒有update from語法,可以通過四種寫法實現(xiàn)同樣的功能:
一、標(biāo)準(zhǔn)update語法(常用、速度可能最慢)
當(dāng)更新的表示單個或者被更新的字段不需要關(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更新法就是更新一個臨時建立的視圖。
方案:更新一個臨時建立的視圖。要求B表的主鍵字段必須在where條件中,并且是以=號來關(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)字段非主鍵時,速度較快)
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)的比較,如果匹配,就對alias1表進(jìn)行更新的操作(Update),如果不匹配,就對alias1表進(jìn)行插入操作(Insert)。
執(zhí)行merge不會返回影響的行數(shù),最多只能兩個表關(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ù)雜邏輯時,效率很高)
語法:
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;
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
設(shè)置oralce自動內(nèi)存管理執(zhí)行步驟
設(shè)置內(nèi)存管理首先要啟用oracle自動內(nèi)存管理需要shutdown ,restart,接下來為大家介紹下詳細(xì)的執(zhí)行步驟,感興趣的朋友可以參考下哈2013-04-04深入探討:oracle中方案的概念以及方案與數(shù)據(jù)庫的關(guān)系
本篇文章是對oracle中方案的概念以及方案與數(shù)據(jù)庫的關(guān)系進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Oracle?function函數(shù)返回結(jié)果集的3種方法
工作中常需要經(jīng)過一段復(fù)雜邏輯處理后,得出的一個結(jié)果集,所以這篇文章主要給大家介紹了關(guān)于Oracle?function函數(shù)返回結(jié)果集的3種方法,需要的朋友可以參考下2023-07-07使用springboot暴露oracle數(shù)據(jù)接口的問題
這篇文章主要介紹了使用springboot暴露oracle數(shù)據(jù)接口的問題,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05Oracle 表三種連接方式使用介紹(sql優(yōu)化)
這篇文章主要介紹了Oracle表三種連接方式的使用,學(xué)習(xí)sql優(yōu)化的朋友可以參考下2014-08-08Oracle隨機(jī)函數(shù)之dbms_random使用詳解
dbms_random是oracle提供的一個隨機(jī)函數(shù)包,本文將詳細(xì)介紹函數(shù)的使用,需要的朋友可以參考下2012-12-12Oracle移動數(shù)據(jù)文件不停機(jī)和停機(jī)兩種方式詳解
這篇文章主要為大家介紹了Oracle移動數(shù)據(jù)文件不停機(jī)和停機(jī)兩種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09