【发布时间】:2022-01-07 18:11:53
【问题描述】:
我正在创建 oracle 报告,如果用户输入 true 或 false,则相应的值应该转到参数。如果用户输入 All,那么 true 和 false 都应该进入参数。
我以 3 种方式使用了以下 case 语句。他们都显示缺少关键字错误。你能帮我解决这个问题吗?
WHERE "EngExec Status" = ((:eng_exec_status = 'True' and "EngExec Status" = 'True')
OR (:eng_exec_status = 'False' AND "EngExec Status" = 'False')
OR (:eng_exec_status = 'All' AND ("EngExec Status" = 'True' OR "EngExec Status"= 'False')))
WHERE "EngExec Status" IN (CASE
WHEN (:eng_exec_status) = 'True' THEN "EngExec Status"= 'True'
WHEN (:eng_exec_status) = 'False' THEN "EngExec Status"= 'False'
ELSE "EngExec Status" IN ('True', 'False')
END)
WHERE "EngExec Status" IN (CASE
WHEN (:eng_exec_status) = 'All' THEN "EngExec Status" IN ('True','False')
ELSE (:eng_exec_status)
END)
【问题讨论】:
-
因为 case 是一个表达式,它应该返回一个标量。 Oracle 没有布尔数据类型,所以
case不能返回"EngExec Status"= 'True' -
还有一个问题:如果它有布尔值,你期望得到什么样的过滤器:
where "EngExec Status" = "EngExec Status"= 'True'?