【发布时间】:2020-02-04 08:05:39
【问题描述】:
请告诉我,这是真的 - 使用 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 - 是进入过程的参数
- 如果 input_parm=Y 则 t1.id 字段不等于 null
- 如果 input_parm=N 则 t1.id 字段等于 null
- 如果 input_parm 为 null,则不应考虑此条件,这些选择器应同时来自 IS NULL 和 IS NOT NULL
- 如果 input_parm 不为 NULL 且 !='Y' 和 !='N' 则 t1.id=input_parm
在示例中,编译器在 THEN 之后发誓 IS NULL。你能帮帮我吗?
【问题讨论】:
-
今日提示:切换到现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 -
在
WHERE子句中使用AND/OR构造而不是case表达式 通常会更好。
标签: sql oracle plsql case isnull