2011-03-04 65 views

回答

11

這個怎麼樣?如果更新標誌被設置爲1,則col1被更新,如果設置爲2,則col2被更新。

UPDATE temp 
    SET col1 = DECODE(update_var, 1, update_value, col1), 
     col2 = DECODE(update_var, 2, update_value, col2) 

此外,作爲獎勵,它會處理在更新變量被設置爲一個或兩個其他的東西可能的情況!

+0

忘記你可以做到這一點! – Sumit 2011-03-07 16:25:59

2

不,你不能這樣做。在UPDATE語句

l_sql := 'UPDATE temp SET col'||update_var||' = :v'; 
EXECUTE IMMEDIATE l_sql USING update_value; 
1

你不能使用解碼:你可以在PL/SQL做到這一點:

IF update_var = 1 THEN 
    UPDATE temp SET col1 = update_value; 
else 
    UPDATE temp SET col2 = update_value; 
END IF; 

或者你可以使用動態SQL這樣的。 但是,您可以使用合併語句。

http://psoug.org/reference/merge.html

MERGE INTO temp b 
USING (
SELECT key, DECODE(update_var, 1, update_value, col1) as col1, 
    DECODE(update_var, 2, update_value, col2) as col2 
FROM temp 
WHERE key =theKeyIPassedIn) e 
ON (b.key = e.key) 
WHEN MATCHED THEN 
UPDATE SET b.col1 = e.col1, b.col2 = e.col2 
; 

基本上你是使用合併的選擇部分來解碼col1和COL2以任一update_value或已經存在的值。

對於您的需求,這也可能過於冗長,使用if語句或立即執行的解決方案可能更適合您的問題。

相關問題