sql—仅当设置了项时才使用where子句,否则选择所有行

yrdbyhpb  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(265)

在我的apex oracle应用程序中,我有一个使用以下sql查询的报表:

select ID,
   NAME,
   ADDRESS,
   TYPE,
   COMPANY_ID as "Company"
from WORKSTATIONS where COMPANY_ID = :P11_FILTER

它按以下值过滤数据:p11\u filter item。现在我需要选择所有行,如果:p11\u filter未设置或为空。我如何修改where子句来实现这一点?

jexiocij

jexiocij1#

一种方法使用 or :

where COMPANY_ID = :P11_FILTER or :P11_FILTER is null
kognpnkq

kognpnkq2#

你可以用 coalesce() 或者 nvl() :

where COMPANY_ID = coalesce(:P11_FILTER, COMPANY_ID)
``` `coalesce(:P11_FILTER, COMPANY_ID)` 退货 `COMPANY_ID` 什么时候 `:P11_FILTER` 是 `null` .
请注意 `where` 在两种情况下,子句不匹配 `COMPANY_ID` 参数为 `NULL` . 这与 `OR` 解决方案,这将返回 `NULL` 在这里划船。

相关问题