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

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

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

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

b5buobof1#

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

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

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

monwx1rj

monwx1rj2#

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

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

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

  1. (
  2. (p_input = 'F' AND COLUMN_1 IN ('F', 'A', 'B'))
  3. OR
  4. (p_input <> 'F' AND COLUMN_1 = p_input)
  5. )

相关问题