这是一个示例查询,显示我正在尝试使用begin_date'2018-02-02'获取名为“sql for everyone”的书,其中authName为null。 这个查询非常好。它返回类似于下面屏幕截图中的行。
SELECT
bookName,
begin_date,
authName
FROM bookwh
WHERE bookName = :bname
AND begin_date = :dt
AND authName IS NULL
我的问题是如何将null作为绑定变量传递?
例如,和authName = :a_null
我应该能够传递null
答案 0 :(得分:3)
NULL是WHERE
子句中的特殊情况,在测试相等性时不起作用。对于空值,您只能测试IS NULL
或IS NOT NULL
。
实现所需内容的一种方法是将相等性检查包装在nvl包装器中。 nvl()
函数有2个参数。第一个参数是一个值(在您的情况下,是一个绑定参数),第二个值是第一个参数为null时的默认值。
AND authName = nvl(:your_bind_parameter, authName)
另一种选择是使用OR语句。
AND (authName = :your_bind_parameter OR authName IS NULL)
NVL()
一种处理空绑定参数的简洁方法。这两种方法都有性能影响所以请检查您的解释计划。
有关您的选项的更全面的解释,请访问Oracle网站上的此博客:https://blogs.oracle.com/sql/optional-search-parameters:-getting-rid-of-those-pesky-or-conditions。
答案 1 :(得分:0)
您在绑定变量中传递空值。
使用SQL Query返回表中的数据,以便像此示例查询一样使用。
select * from table_name where (authName = :parameter OR authName IS NULL)
答案 2 :(得分:0)
以下代码对我有用 从表名中选择* 哪里 (((:parameter不为null且authName =:parameter)或(:: parameter为null且authName为null));