case when以及decode也是不行的,因为 多值判断函数是函数,不是表达式,它只能以表达式的方式调用,而且不能以判断条件的方式调用。
也就是在单条sql语句中,case when以及decode函数只能出现select 和 from tablename之间,不能出现在where或者on后面。
[/Quote]
我用了好多次在WHERE好吧,请实际用过后再说话
我们经常这样用的
select
from a
where
a.id=decode(:in_id,0,a.id,:in_id)
表示传进去的参数是0的话,则是查全部纪录,否则是指定值
也可以用CASE when
a.id=
case
when :in_id=0
then a.id
else :in_id
end
效果是一样
可以看出DECODE简洁,但不是通用SQL
另外DECODE不支持OR AND 条件 如:in_id=0 or :in_id=999999,当然也是可以实现,就是一个个判断
另外DECODE不支持>,<等等
只能通过列多个选项,或者通过SIGN函数来实现