Oracle-WHERE和in()中的用例

Oracle-WHERE和in()中的用例,oracle,case,where,Oracle,Case,Where,在甲骨文的WHERE中有CASE-IN子句吗 例如: SELECT vip FROM table WHERE CASE WHEN $inputVar LIKE '' THEN vip IN (1,2,3) ELSE vip in ($inputVar) END 编辑:使用此代码,我得到错误: ORA-00905:缺少关键字 使用子查询执行此操作 SELECT vip FROM table WHERE vip in (select CASE WHEN $input

在甲骨文的WHERE中有CASE-IN子句吗

例如:

SELECT vip 
FROM table 
WHERE
  CASE WHEN $inputVar LIKE '' 
  THEN vip IN (1,2,3)
  ELSE vip in ($inputVar)
  END
编辑:使用此代码,我得到错误:

ORA-00905:缺少关键字

使用子查询执行此操作

SELECT vip 
FROM table 
WHERE
vip in
 (select
  CASE WHEN $inputVar LIKE '' 
  THEN 1
  ELSE $inputVar
  END from dual)
但是,如果您希望将默认值设置为多个记录,并用逗号分隔,则无法执行此操作。你必须动态地构建它

在union的帮助下进行查询

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

如果vip在选择的情况下失败,则LIKE然后1 ELSE 2,3,4从双重编辑结束:动态框显它意味着什么?对不起,这个愚蠢的问题。请举个例子。谢谢。我不能在我的情况下使用存储过程。不管怎样,谢谢您的帮助。从表中,$inputvar中的vip-如果$inputvar是空字符串,则Oracle将不会执行查询…是的,这就是为什么我们有union all。在这种情况下,将执行第一个查询并返回默认值。在反向的情况下,第一个查询将不会返回任何值,第二个查询将返回任何值。什么是$inputVar?您的查询可能只有一个OR子句,但如果您希望传入一个标量变量,该变量是一个带有逗号分隔值的字符串,并将其作为in列表的一部分进行计算,那么这是行不通的。