如何在绑定变量

时间:2018-02-08 00:31:02

标签: sql oracle plsql

这是一个示例查询,显示我正在尝试使用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

enter image description here

我的问题是如何将null作为绑定变量传递? 例如,和authName = :a_null我应该能够传递null

3 个答案:

答案 0 :(得分:3)

NULL是WHERE子句中的特殊情况,在测试相等性时不起作用。对于空值,您只能测试IS NULLIS 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));