我不太理解這個DECODE函數將如何自行解決,特別是在尖(==>)參數:DECODE在ORACLE
DECODE
(
SH.RESPCODE, 0, SH.AMOUNT-DEVICE_FEE,
102, SH.NEW_AMOUNT-DEVICE_FEE,
==>AMOUNT-DEVICE_FEE,
0
)
預先感謝什麼該參數將解決任何啓示至。
我不太理解這個DECODE函數將如何自行解決,特別是在尖(==>)參數:DECODE在ORACLE
DECODE
(
SH.RESPCODE, 0, SH.AMOUNT-DEVICE_FEE,
102, SH.NEW_AMOUNT-DEVICE_FEE,
==>AMOUNT-DEVICE_FEE,
0
)
預先感謝什麼該參數將解決任何啓示至。
在僞代碼,這將是等效於下面的IF語句
IF(sh.respcode = 0)
THEN
RETURN sh.amount-device_fee
ELSIF(sh.respcode = 102)
THEN
RETURN sh.new_amount-device_fee
ELSIF(sh.respcode = amount-device_fee)
THEN
RETURN 0;
END IF;
DECODE
基本上相當於CASE
表達式。
所以這
DECODE
(
SH.RESPCODE, 0, SH.AMOUNT-DEVICE_FEE,
102, SH.NEW_AMOUNT-DEVICE_FEE,
==>AMOUNT-DEVICE_FEE,
0
)
相當於該
CASE SH.RESPCODE
WHEN 0 THEN SH.AMOUNT - DEVICE_FEE
WHEN 102 THEN SH.NEW_AMOUNT - DEVICE_FEE
WHEN AMOUNT - DEVICE_FEE THEN 0
END
它說:
If the value of SH.RESPCODE is 0, then return SH.AMOUNT-DEVICE_FEE.
Otherwise, if it's equal to 102, then return SH.NEW_AMOUNT-DEVICE_FEE.
Otherwise, if it's equal to AMOUNT-DEVICE_FEE, then return 0
作爲一個case語句將是:
Case SH.RESPCODE
when 0 then SH.AMOUNT-DEVICE_FEE
when 102 then rSH.NEW_AMOUNT-DEVICE_FEE
when AMOUNT-DEVICE_FEE then 0
else null
end
有關於兩者之間的待遇NULL的一些細微的差別。
關於DECODE
相當於CASE
的意見很好。有一件事我發現是有幫助的就是格式化DECODE
調用,使其更具可讀性,如:
DECODE(SH.RESPCODE,
0, SH.AMOUNT-DEVICE_FEE,
102, SH.NEW_AMOUNT-DEVICE_FEE,
AMOUNT-DEVICE_FEE, 0)
分享和享受。
是的,這是我的混亂,因爲代碼缺乏格式化的一部分,所以我最終假設最後的值是默認值。 – mimabe
是的。換句話說,如果'SH.RESPCODE'等於'(AMOUNT - DEVICE_FEE)',那麼表達式將返回'0'。 – rsenna
當然,除非之前的WHEN條款是真實的。它們按順序進行評估,就像'DECODE'調用一樣。 – rsenna