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

Ale*_*lex 2 java sql plsql

有没有办法检查是NULLPL/SQL 中的值列表?

我有类似的东西:

SELECT * FROM myTable t WHERE t.dataId IN (:myList) OR :myList IS NULL
Run Code Online (Sandbox Code Playgroud)

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

SELECT * FROM myTable t WHERE t.dataId IN ('a', 'b', 'c') OR  ('a', 'b', 'c') IS NULL
Run Code Online (Sandbox Code Playgroud)

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

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

tra*_*cki 5

也许COALESCE会帮助你:

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

 SELECT * FROM myTable t WHERE t.dataId IN (:myList) OR COALESCE(:myList) IS NULL
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我认为这个功能可能是解决方案.我已经意识到如果:myList为空它返回'''`所以我认为解决方案是使用`COALESCE(:myList,'')IS NULL`.那看起来不错吗? (3认同)
  • 我使用了形式 COALESCE(:myList, NULL) IS NULL 但 COALESCE(:myList, '') IS NULL 也可以工作,因为 Oracle 根据 http://stackoverflow.com/a/15357813/908677 将 '' 视为 NULL 或http://searchoracle.techtarget.com/answer/Oracle-treats-empty-strings-as-NULL (2认同)