我可以在SET左側的UPDATE語句中使用DECODE嗎?我可以在UPDATE語句中使用DECODE嗎?
UPDATE temp SET DECODE(update_var,1,col1, 2,col2)= update_value;
這是給我錯誤,因爲Eual標誌被忽略..
我可以在SET左側的UPDATE語句中使用DECODE嗎?我可以在UPDATE語句中使用DECODE嗎?
UPDATE temp SET DECODE(update_var,1,col1, 2,col2)= update_value;
這是給我錯誤,因爲Eual標誌被忽略..
這個怎麼樣?如果更新標誌被設置爲1,則col1被更新,如果設置爲2,則col2被更新。
UPDATE temp
SET col1 = DECODE(update_var, 1, update_value, col1),
col2 = DECODE(update_var, 2, update_value, col2)
此外,作爲獎勵,它會處理在更新變量被設置爲一個或兩個其他的東西可能的情況!
不,你不能這樣做。在UPDATE語句
l_sql := 'UPDATE temp SET col'||update_var||' = :v';
EXECUTE IMMEDIATE l_sql USING update_value;
你不能使用解碼:你可以在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語句或立即執行的解決方案可能更適合您的問題。
忘記你可以做到這一點! – Sumit 2011-03-07 16:25:59