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

最佳答案

也许COALESCE可以帮助您:

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

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

09-27 00:21
查看更多