谓词中 CASE 中的 IS NULL

IS NULL in CASE in predicates

请告诉我,这是真的 - 使用 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。你能帮我吗?

CASE 表达式(即 THENELSE 之后的谓词)必须是文字值,而不是布尔表达式。您可以将 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

使用AND/OR更容易,但如果你真的想使用CASE..WHEN那么你可以使用以下:

    CASE
        WHEN INPUT_PARM = 'Y'
             AND T1.ID IS NOT NULL THEN 1
        WHEN INPUT_PARM = 'N'
             AND T1.ID IS NULL THEN 1
        WHEN INPUT_PARM IS NULL THEN 1
        WHEN T1.ID = INPUT_PARM THEN 1
    END = 1

干杯!!