Oracle Apex - where 语句中的案例

Oracle Apex - Case within a where statement

我在 运行 以下查询时遇到问题(交互式报告/简化了查询,因为我确定问题出在 case 语句上):

select 
v.manager_email 
from my_table  v
where 

(
case 
when :P28_ACT_AS_ROLE_H = 'Director' then v.director_email = :P28_ACT_AS_H 
when :P28_ACT_AS_ROLE_H = 'Admin'        then v.manager_email  = nvl(:P28_ACT_AS_H, 
v.manager_email)
when :P28_ACT_AS_ROLE_H = 'Manager'  then v.manager_email  = :P28_ACT_AS_H

end
)

错误是这个:ORA-20999。 有人知道为什么会这样吗? (:p28 项是通过计算计算出来的,完美运行)

谢谢!

当布尔逻辑足够时,不要使用 case

where (:P28_ACT_AS_ROLE_H = 'Director' and v.director_email = :P28_ACT_AS_H) or
      (:P28_ACT_AS_ROLE_H = 'Admin' and v.manager_email = nvl(:P28_ACT_AS_H, v.manager_email)) or
      (:P28_ACT_AS_ROLE_H = 'Manager' and v.manager_email  = :P28_ACT_AS_H)

您示例中的具体原因是 Oracle 无法将布尔表达式识别为 case 的有效 return 值,从而导致语法错误

或者,CASE

where nvl(:P28_CT_AS_H, v.manager_email) =
      case when :P28_ACT_AS_ROLE_H = 'Director' then v.director_email
           when :P28_ACT_AS_ROLE_H = 'Admin'    then v.manager_email
           when :P28_ACT_AS_ROLE_H = 'Manager'  then v.manager_email
      end