只有在设置了项目时才使用 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_FILTERnull.

注意这个where子句在COMPANY_ID和参数都是NULL的情况下是不匹配的。这与 OR 解决方案不同,后者将 returns 此处的 NULL 行。