PL/SQL 案例何时 - 将输入映射到其他列值



我已经在Stack的其他地方检查过,但我找不到类似的场景。

我想基本上将 PL/SQL 过程中的 1 个输入映射到 MY_TABLE 中的 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;

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

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

特别是,Oracle在SQL中没有布尔类型(在PL/SQL中有(。 因此,case 表达式不能返回布尔值。

如果您正在学习如何在where子句中使用case..when,那么代码如下:

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

但正如其他答案中所建议的,建议使用or在使用OR时,使用负面条件p_input <> 'F'第二个条件总是一个好主意:

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

最新更新