首页 > 解决方案 > 带有值oracle sql的where子句中的case语句

问题描述

我正在开发 Oracle Apex 应用程序。我有一个简单的选择查询,它工作正常,但现在我想在该查询中执行 if/else 或 case 语句。

所以查询如下

select value d,
       id r
  from dhm_lov_data
 where lov_id = 103
   and nvl(isdeleted,0) = 0
   and parentid_1 =:p21_typeid
 order by d

我想更改此查询以添加:P21_TYPEID值条件。例如,如果:P21_TYPEID值是 1,那么在 where 子句中它应该是PARENTID_1 in (10,11) else PARENTID_1 = :P21_TYPEID

我试图把它放在案例声明中,但它没有用。以下是我正在尝试使用案例语句进行工作的查询

SELECT  VALUE d, id r FROM DHM_LOV_DATA WHERE LOV_ID= 103 and nvl(ISDELETED,0) = 0  
and 
case when :P21_TYPEID = 848 then PARENTID_1 in (287,288)
    else PARENTID_1 = :P21_TYPEID  end;
order by d

标签: sqloracleselectcaseoracle-apex

解决方案


表达式返回一个case值,而不是您可以添加到where子句中的条件。但是您可以使用一些布尔运算符来模拟这种行为:

SELECT   value d, id r 
FROM     dhm_lov_data
WHERE    lov_id = 103 AND
         NVL(isselected, 0) = 0 AND
         (:P21_TYPEID = 848 AND parentid_1 IN (287,288) OR
          :P21_TYPEID = parentid_1)
ORDER BY d

推荐阅读