PL / SQL中的检查值列表为NULL

时间:2013-08-08 10:36:02

标签: java sql plsql

有没有办法检查PL / SQL中的值列表是NULL

我有以下几点:

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),如果列表为空,它将返回''

2 个答案:

答案 0 :(得分:5)

也许COALESCE会帮助您:

它评估从左到右的值列表,并返回第一个值NOT NULL。如果所有值均为NULL,则评估为NULL,这是您可以检查IS NULL的单个值。

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

答案 1 :(得分: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

肯定有其他方法可以做到这一点。在网上快速搜索会出现this等内容。