4

有没有办法检查值列表是否NULL在 PL/SQL 中?

我有一些类似的东西:

SELECT * FROM myTable t WHERE t.dataId IN (:myList) OR :myList IS NULL

在运行时,:myList符号被替换为字符串列表,例如

SELECT * FROM myTable t WHERE t.dataId IN ('a', 'b', 'c') OR  ('a', 'b', 'c') IS NULL

我意识到这('a', 'b', 'c') IS NULL是无效的 PL/SQL,所以我想知道是否有另一种方法来检查值列表评估为NULL.

我试图模仿的行为将评估('a', 'b', 'c')NOT NULL. 我试图避免创建另一个变量(例如:myListFlag),''如果列表为空,它将返回。

4

2 回答 2

7

也许COALESCE会帮助你:

它计算从左到右的值列表并返回第一个值NOT NULL. 如果所有值都是NULL,则计算结果为NULL,这是您可以检查的单个值IS NULL

 SELECT * FROM myTable t WHERE t.dataId IN (:myList) OR COALESCE(:myList) IS NULL
于 2013-08-08T11:32:04.920 回答
0

我不熟悉以下语法来满足您的期望:

WHERE t.dataId IN (:myList)

通常,变量替换会产生单个值。因此,如果值为'a,b,c',那么这将匹配 的值'a,b,c',但不匹配'a'

您可以使用其他表达式来执行此操作。最通用的(即适用于大多数数据库)是这样的:

where ','||:myList||',' like '%,'||t.data_id||',%'

有了这样的结构,你可以很容易地说:

where ','||:myList||',' like '%,'||t.data_id||',%' and :myList is not null

肯定还有其他方法可以做到这一点。在网上快速搜索会出现这样的事情

于 2013-08-08T11:03:03.480 回答