【发布时间】:2020-06-01 18:01:34
【问题描述】:
我有以下示例查询,它从过程参数中获取值。该参数可以被传递或默认为空。
SELECT * FROM table
WHERE( table_term_code = '201931'
OR (table_term_code = '201931' and table_DETL_CODE ='CA02')
OR ( table_term_code = '201931' and table_ACTIVITY_DATE = sysdate)
OR ( table_term_code = '201931' and table_SEQNO = NULL));
即用户可以输入术语代码而不输入任何其他参数,或者可以输入术语代码和table_DETL_CODE而不输入任何其他输入参数。
其他两个条件也一样。
如果传递了术语代码并且 table_DETL_CODE 为 null,则查询应返回该 term_code 的所有值,而此查询返回 null。
有没有办法在 PL/SQL 中不使用 case 或 if 条件来实现这一点?
【问题讨论】:
-
Oracle 具有内置的空值处理功能。参考documentation
-
A Abra - 我确实尝试过 NVL ,但我的问题是即使 table_DETL_CODE 不为空,那么我的查询应该过滤第二个条件,而不是 where 子句为我提供 term_code 中的所有记录。
标签: sql oracle plsql plsqldeveloper plsql-package