只有在设置了项目时才使用 WHERE 子句,否则 select 所有行
Use WHERE clause only if item is set, otherwise select all rows
在我的 Apex Oracle 应用程序中,我有一个使用此 sql 查询的报告:
select ID,
NAME,
ADDRESS,
TYPE,
COMPANY_ID as "Company"
from WORKSTATIONS where COMPANY_ID = :P11_FILTER
按 :P11_FILTER 项的值过滤数据。现在,如果 :P11_FILTER 未设置或为 NULL,我需要 select 所有行。我该如何修改 where 子句才能实现这一点?
一种方法使用 or
:
where COMPANY_ID = :P11_FILTER or :P11_FILTER is null
您可以使用 coalesce()
或 nvl()
:
where COMPANY_ID = coalesce(:P11_FILTER, COMPANY_ID)
coalesce(:P11_FILTER, COMPANY_ID)
returns COMPANY_ID
当 :P11_FILTER
是 null
.
注意这个where
子句在COMPANY_ID
和参数都是NULL
的情况下是不匹配的。这与 OR
解决方案不同,后者将 returns 此处的 NULL
行。
在我的 Apex Oracle 应用程序中,我有一个使用此 sql 查询的报告:
select ID,
NAME,
ADDRESS,
TYPE,
COMPANY_ID as "Company"
from WORKSTATIONS where COMPANY_ID = :P11_FILTER
按 :P11_FILTER 项的值过滤数据。现在,如果 :P11_FILTER 未设置或为 NULL,我需要 select 所有行。我该如何修改 where 子句才能实现这一点?
一种方法使用 or
:
where COMPANY_ID = :P11_FILTER or :P11_FILTER is null
您可以使用 coalesce()
或 nvl()
:
where COMPANY_ID = coalesce(:P11_FILTER, COMPANY_ID)
coalesce(:P11_FILTER, COMPANY_ID)
returns COMPANY_ID
当 :P11_FILTER
是 null
.
注意这个where
子句在COMPANY_ID
和参数都是NULL
的情况下是不匹配的。这与 OR
解决方案不同,后者将 returns 此处的 NULL
行。