忽略 SQL 中的空绑定变量
Posted
技术标签:
【中文标题】忽略 SQL 中的空绑定变量【英文标题】:Ignore Null Bind Variables in SQL 【发布时间】:2021-08-17 21:18:45 【问题描述】:我正在尝试创建一个动态 SQL 语句,可用于基于多个参数进行过滤。但需要注意的一点是,并非所有参数都可用,因此可以有 4 个变量,也可以是 0。
这是我创建这个查询的尝试(只有一个变量的小例子):
SELECT FIRST_NAME, LAST_NAME
FROM USERS
WHERE (CASE WHEN :1 IS NULL THEN 1 = 1 ELSE FIRST_NAME = :1 END;
但是这会引发编译错误,所以我想知道是否有其他方法可以实现它?
【问题讨论】:
where (:1 IS NULL OR FIRST_NAME = :1) AND (:2 etc
【参考方案1】:
你可以使用:
SELECT FIRST_NAME, LAST_NAME
FROM USERS
WHERE (:1 IS NULL OR FIRST_NAME = :1)
AND (:2 IS NULL OR LAST_NAME = :2)
AND (:3 IS NULL OR SPECIES = :3)
AND (:4 IS NULL OR HOME_PLANET = :4);
【讨论】:
即使 FIRST_NAME、LAST_NAME 等本身为空,这也应该可以工作,对吧?这也应该返回那些记录? @Chen 如果:1
是NULL
,那么它将匹配任何FIRST_NAME
,无论它是NULL
还是非NULL
。
是的,做了一个快速测试,它成功了,非常感谢。【参考方案2】:
作为替代方案,您可以使用DECODE
,这样您就不必将每个搜索参数绑定两次。比如:
SELECT first_name, last_name
FROM users u
WHERE DECODE(:1, NULL, 1, u.first_name, 1, 0) = 1
AND DECODE(:2, NULL, 1, u.last_name, 1, 0) = 1;
【讨论】:
以上是关于忽略 SQL 中的空绑定变量的主要内容,如果未能解决你的问题,请参考以下文章