Oracle執(zhí)行Update語(yǔ)句的幾種方式
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)文章
ORACLE 常用的SQL語(yǔ)法和數(shù)據(jù)對(duì)象
ORACLE 常用的SQL語(yǔ)法和數(shù)據(jù)對(duì)象...2007-03-03設(shè)置oralce自動(dòng)內(nèi)存管理執(zhí)行步驟
設(shè)置內(nèi)存管理首先要啟用oracle自動(dòng)內(nèi)存管理需要shutdown ,restart,接下來(lái)為大家介紹下詳細(xì)的執(zhí)行步驟,感興趣的朋友可以參考下哈2013-04-04深入探討:oracle中方案的概念以及方案與數(shù)據(jù)庫(kù)的關(guān)系
本篇文章是對(duì)oracle中方案的概念以及方案與數(shù)據(jù)庫(kù)的關(guān)系進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05Oracle?function函數(shù)返回結(jié)果集的3種方法
工作中常需要經(jīng)過(guò)一段復(fù)雜邏輯處理后,得出的一個(gè)結(jié)果集,所以這篇文章主要給大家介紹了關(guān)于Oracle?function函數(shù)返回結(jié)果集的3種方法,需要的朋友可以參考下2023-07-07oracle自動(dòng)生成uuid的實(shí)現(xiàn)方法
這篇文章主要介紹了oracle自動(dòng)生成uuid的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11使用springboot暴露oracle數(shù)據(jù)接口的問(wèn)題
這篇文章主要介紹了使用springboot暴露oracle數(shù)據(jù)接口的問(wèn)題,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05Oracle 表三種連接方式使用介紹(sql優(yōu)化)
這篇文章主要介紹了Oracle表三種連接方式的使用,學(xué)習(xí)sql優(yōu)化的朋友可以參考下2014-08-08Oracle隨機(jī)函數(shù)之dbms_random使用詳解
dbms_random是oracle提供的一個(gè)隨機(jī)函數(shù)包,本文將詳細(xì)介紹函數(shù)的使用,需要的朋友可以參考下2012-12-12Oracle移動(dòng)數(shù)據(jù)文件不停機(jī)和停機(jī)兩種方式詳解
這篇文章主要為大家介紹了Oracle移動(dòng)數(shù)據(jù)文件不停機(jī)和停機(jī)兩種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09