告诉我,这是真实的-使用CASE构造,其中将在TNEN中返回带有IS NULL / IS NOT NULL的表达式?我在一个程序包中有一个过程,该过程接收输入参数,并将其传递给游标中的选择器,我要设置谓词之一:
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
表达式的谓词(即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
干杯!