谓词中 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 - 是进入程序的参数
- if input_parm=Y 那么 t1.id 字段不等于 null
- if input_parm=N 那么 t1.id 字段等于 null
- 如果 input_parm 为 null 则不应将此条件纳入条件,这些选择器应同时来自 IS NULL 和 IS NOT NULL
- if input_parm IS NOT NULL and !='Y' and !='N' then t1.id=input_parm
在示例中,编译器在 THEN 之后发誓为 IS NULL。你能帮我吗?
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
使用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
干杯!!
请告诉我,这是真的 - 使用 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 - 是进入程序的参数
- if input_parm=Y 那么 t1.id 字段不等于 null
- if input_parm=N 那么 t1.id 字段等于 null
- 如果 input_parm 为 null 则不应将此条件纳入条件,这些选择器应同时来自 IS NULL 和 IS NOT NULL
- if input_parm IS NOT NULL and !='Y' and !='N' then t1.id=input_parm
在示例中,编译器在 THEN 之后发誓为 IS NULL。你能帮我吗?
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
使用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
干杯!!