pl/sql case-when将输入Map到其他列值

lf3rwulv  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(280)

我已经检查了堆栈上的其他地方,但找不到类似的场景。
我想将pl/sql过程中的1个输入Map到我的表中的3个不同的值;否则我只想过滤输入。我想解决类似下面的伪代码

SELECT * FROM MY_TABLE
WHERE COLUMN 1 = 'B'
AND CASE WHEN p_input = 'F' THEN COLUMN_1 IN ('F','A','B')
         ELSE COLUMN_1 = p_input;
b5buobof

b5buobof1#

我不建议使用 case 中的表达式 where . 只需使用更简单的布尔逻辑运算符:

WHERE COLUMN 1 = 'B' AND
      ( (p_input = 'F' AND COLUMN_1 IN ('F', 'A', 'B')) OR
        COLUMN_1 = p_input
      )

特别是,oracle在sql中没有布尔类型(pl/sql中有on)。所以case表达式不能返回布尔值。

monwx1rj

monwx1rj2#

如果你正在学习如何使用 case..whenwhere 那么下面是代码:

CASE WHEN p_input = 'F' AND COLUMN_1 IN ('F','A','B') THEN 1
     WHEN COLUMN_1 = p_input THEN 1
END = 1

但正如其他答案所建议的,建议使用 or 使用否定条件总是一个好主意 p_input <> 'F' 在第二种情况下使用 OR 具体如下:

( 
(p_input = 'F' AND COLUMN_1 IN ('F', 'A', 'B'))
OR
(p_input <> 'F' AND COLUMN_1 = p_input)
)

相关问题