Oracle Apex - where 语句中的案例
Posted
技术标签:
【中文标题】Oracle Apex - where 语句中的案例【英文标题】:Oracle Apex - Case within a where statement 【发布时间】:2021-06-10 13:10:11 【问题描述】:我在运行以下查询时遇到问题(交互式报告/简化了查询,因为我确定问题出在 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 项是通过计算计算出来的,并且可以完美运行)
谢谢!
【问题讨论】:
【参考方案1】:当布尔逻辑足够时不要使用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
的有效返回值,从而导致语法错误
【讨论】:
我还不知道它是如何工作的,但确实如此!谢谢!非常感谢【参考方案2】:或者,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
【讨论】:
以上是关于Oracle Apex - where 语句中的案例的主要内容,如果未能解决你的问题,请参考以下文章