首页 > 解决方案 > 谓词中的 CASE 中为 NULL

问题描述

请告诉我,这是真的 - 使用 CASE 构造,其中带有 IS NULL/IS NOT NULL 的表达式将在 TNEN 中返回?我在一个包中有一个接收输入参数的过程,它被传递给游标中的选择器,我想设置一个谓词:

  select t1...
         t2...
  from test t1,
       test t2
  where t1.flg = 'N'
  AND t2.field = 'supertest'
  AND CASE 
            WHEN input_parm = 'Y' THEN t1.id IS NOT NULL
            WHEN input_parm = 'N' THEN t1.id IS NULL
            WHEN input_parm IS NULL THEN
            ELSE t1.id = input_parm
            END

input_parm - 是进入程序的参数

在示例中,编译器在 THEN 之后发誓 IS NULL。你能帮我吗?

标签: sqloracleplsqlcaseisnull

解决方案


表达式的谓词CASE(即THEN和后面的ELSE)必须是文字值,而不是布尔表达式。您可以将CASE表达式重构为:

AND
    (input_parm = 'Y' AND t1.id IS NOT NULL) OR
    (input_parm = 'N' AND t1.id IS NULL) OR
    input_parm IS NULL OR
    t1.id = input_parm

推荐阅读