有没有办法检查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),如果列表为空,它将返回''
。
答案 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等内容。