Oracle - 在WHERE和IN()中使用CASE

时间:2013-09-10 11:58:41

标签: oracle case where

是否可以在Oracle的CASE IN()中拥有WHERE条款?

例如:

SELECT vip 
FROM table 
WHERE
  CASE WHEN $inputVar LIKE '' 
  THEN vip IN (1,2,3)
  ELSE vip in ($inputVar)
  END

编辑:使用此代码我收到错误:

  

ORA-00905:缺少关键字

1 个答案:

答案 0 :(得分:1)

使用子查询来完成。

SELECT vip 
FROM table 
WHERE
vip in
 (select
  CASE WHEN $inputVar LIKE '' 
  THEN 1
  ELSE $inputVar
  END from dual)

但是如果您希望默认值为逗号分隔的多个记录,则无法完成。你必须动态地构建它。

在联盟的帮助下进行查询

select * from table where vip in (1,2,3) and $inputvar = ''
union all
select * from table where vip in $inputvar