作者justyes (justyes)
站内Database
标题Re: [SQL ] 2个参数的写法??
时间Wed Dec 15 23:56:05 2010
※ 引述《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