有一群友需要改update語句中的驅動表
update p
set gflag = 1
where exists (select 1
from t
where t.region = :b2
and t.cycle = :b1
and t.acctid = p.acctid)
因為t表返回資料較少,所以他想讓t做驅動表。
一般這種情況可以使用qb_name
update /*+ leading(t@in2) */ p
set gflag = 1
where exists (select /*+ qb_name(in2) */ 1
from t
where t.region = :b2
and t.cycle = :b1
and t.acctid = p.acctid)
但網友的環境使用這種方法無效,他的oracle是9i,我手邊沒有這個環境。
只有改為可更新檢視的方式來試下
update (select /*+ bypass_ujvc use_hash(p,t) leading(t) */
p.gflag
from p
inner join (select distinct acctid
from t
where t.region = :b2
and t.cycle = :b1) t
on t.acctid = p.acctid)
set gflag = 1
該方法測試通過
用表驅動代替switch case
不知道從什麼時候開始,switch case語句成了 壞味道的代名詞,寫 的時候小心翼翼地避開它,看到別人 中的switch case就皺眉頭,想想其實大可不必這樣,switch case語句並不是 壞味道的根源,壞味道來自糟糕的 結構 設計,比如過多的switch case分支,或者多重switc...
用表驅動代替switch case
不知道從什麼時候開始,switch case語句成了 壞味道的代名詞,寫 的時候小心翼翼地避開它,看到別人 中的switch case就皺眉頭,想想其實大可不必這樣,switch case語句並不是 壞味道的根源,壞味道來自糟糕的 結構 設計,比如過多的switch case分支,或者多重switc...
用表驅動代替switch case
不知道從什麼時候開始,switch case語句成了 壞味道的代名詞,寫 的時候小心翼翼地避開它,看到別人 中的switch case就皺眉頭,想想其實大可不必這樣,switch case語句並不是 壞味道的根源,壞味道來自糟糕的 結構 設計,比如過多的switch case分支,或者多重switc...