这是一个示例查询,显示我正在尝试获取名为“sql for every”的书,其 begin_date 为“2018-02-02”,其中 authName 为 null。这个查询完全没问题。它返回类似于下面屏幕截图中的一行。
SELECT
bookName,
begin_date,
authName
FROM bookwh
WHERE bookName = :bname
AND begin_date = :dt
AND authName IS NULL
Run Code Online (Sandbox Code Playgroud)
我的问题是如何将 null 作为绑定变量传递?例如,authName = :a_null 我应该能够传递 null
NULL 是子句中的一种特殊情况WHERE,在测试相等性时不起作用。对于 null,您只能测试IS NULLor IS NOT NULL。
完成您想要的任务的一种方法是将相等性检查包装在 nvl 包装器中。该nvl()函数有 2 个参数。第一个参数是一个值(在您的情况下是绑定参数),第二个值是默认值(如果第一个参数为 null)。
AND authName = nvl(:your_bind_parameter, authName)
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用 OR 语句。
AND (authName = :your_bind_parameter OR authName IS NULL)
Run Code Online (Sandbox Code Playgroud)
NVL()处理空绑定参数的干净方法。这两种方法都会对性能产生影响,因此请检查您的解释计划。
有关选项的更全面说明,请查看 Oracle 网站上的博客: https: //blogs.oracle.com/sql/optional-search-parameters :-getting-rid-of-those-pesky-or-conditions 。
| 归档时间: |
|
| 查看次数: |
5546 次 |
| 最近记录: |