Sql 如何在bind变量中传递null值

Sql 如何在bind变量中传递null值,sql,oracle,plsql,Sql,Oracle,Plsql,这是一个示例查询,显示我正在尝试获取名为“sql for everyone”的书,其开始日期为“2018-02-02”,其中authName为null。 这个问题很好。它返回一行类似于下面屏幕截图中的一行 SELECT bookName, begin_date, authName FROM bookwh WHERE bookName = :bname AND begin_date = :dt AND authName IS NULL 我的问题是如何将null作为绑定变量传递? 例

这是一个示例查询,显示我正在尝试获取名为“sql for everyone”的书,其开始日期为“2018-02-02”,其中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

null是
WHERE
子句中的特例,在测试是否相等时不起作用。使用空值时,只能测试
是否为空
是否为非空

实现所需功能的一种方法是将相等性检查包装在nvl包装器中。
nvl()
函数接受两个参数。第一个参数是一个值(在您的情况下是一个绑定参数),第二个值是第一个参数为null时的默认值

AND authName = nvl(:your_bind_parameter, authName)
另一种选择是使用OR语句

AND (authName = :your_bind_parameter OR authName IS NULL)
NVL()
处理空绑定参数的干净方法。这两种方法都会影响性能,因此请检查您的解释计划


要更全面地解释您的选项,请查看Oracle网站上的此博客:。

您在bind变量中传递空值

使用SQL查询返回表中要使用的数据,如下面的示例查询

select * from table_name where (authName = :parameter OR authName IS NULL)

下面的代码对我有用 从表名称中选择* 哪里
(:参数不为null且authName=:参数)或(:参数为null且authName为null))

什么是编程语言我想你需要一个指示符变量。