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
我在 运行 以下查询时遇到问题(交互式报告/简化了查询,因为我确定问题出在 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