Re: [SQL ] 2個參數的寫法??
※ 引述《daniel1205 (艾琳是我最愛的人!!)》之銘言:
: ※ 引述《justyes (justyes)》之銘言:
: : 目前遇到一個問題,原本只有一個參數寫法如下
: : and dfv.ATTRIBUTE1 in nvl(:P_MEA,dfv.ATTRIBUTE1)
: : 但後來想再增加一個篩選條件,改寫如下
: : and dfv.ATTRIBUTE1 in (nvl(:P_MEA,dfv.ATTRIBUTE1),nvl(:P_MEA1,null))
: : 但測試時,值還是輸入出來
: : 不知小弟哪寫錯
: and dfv.ATTRIBUTE1 in (nvl(:P_MEA,dfv.ATTRIBUTE1),nvl(:P_MEA1,null))
: 等同於
: and ( dfv.ATTRIBUTE1 in (nvl(:P_MEA,dfv.ATTRIBUTE1))
: OR dfv.ATTRIBUTE1 in (nvl(:P_MEA1,null))
: )
: 如果你希望增加一個篩選條件,
: 應該是加一個 AND 條件才對
: EX:
: and dfv.ATTRIBUTE1 in nvl(:P_MEA,dfv.ATTRIBUTE1)
: AND dfv.ATTRIBUTE1 = :P_MEA1
: 另外...
: nvl(:P_MEA1,null) <-- 這樣的語法似乎有點詭異??
: ==> P_MEA1 如果是 NULL 的話, 就給他 NULL ... 囧
: 然後又把 NULL 丟去當 AND 條件.... <囧>
假如:P_MEA 有輸入參數 ==> 篩選條件就是:P_MEA
:P_MEA1 沒有輸入參數
假如:P_MEA 沒有輸入參數 ==> 篩選條件就是dfv.ATTRIBUTE1
:P_MEA1 沒有輸入參數
假如:P_MEA 沒有輸入參數 ==> 篩選條件就是:P_MEA1
:P_MEA1 有輸入參數
假如:P_MEA 有輸入參數 ==> 輸出結果就是:P_MEA + :P_MEA1
:P_MEA1 有輸入參數
依照上述四種狀況才寫出
AND dfv.ATTRIBUTE1 IN (nvl(:P_MEA,dfv.ATTRIBUTE1),nvl(:P_MEA1,null))
不過大大說的有理nvl(:P_MEA1,null))的確詭異 且第三種狀況似乎會有問題
這就是一直困擾的問題,無法嚴謹的寫出
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.1.43
討論串 (同標題文章)