忽略 SQL 中的空绑定变量

Ignore Null Bind Variables in SQL

我正在尝试创建一个动态 SQL 语句,它可用于根据多个参数进行过滤。但需要注意的是,并非所有参数都可用,因此可以是 4 个变量,也可以是 0 个。

这是我创建此查询的尝试(只有一个变量的小示例):

SELECT FIRST_NAME, LAST_NAME
FROM USERS
WHERE (CASE WHEN :1 IS NULL THEN 1 = 1 ELSE FIRST_NAME = :1 END;

然而,这会引发编译错误,所以我想知道是否有其他方法可以实现它?

您可以使用:

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);

作为替代方案,您可以使用 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;