在 Oracle 的 Where 子句中使用 Case When
Using Case When in the Where Clause in Oracle
我有一个过程,它有一个输入参数 p_card_type。根据输入参数,where 子句发生变化。这是查询的样子。我有 4 个不同的选项,但它们都出错了。
SELECT * FROM table WHERE CARD_TYPE in (p_card_type)
--这是我尝试过的4个选项。
SELECT * FROM table WHERE
- Case p_card_type when 'EGC/VEGC' THEN CARD_TYPE in ('EGC', 'VEGC') else CARD_TYPE in (p_card_type) End
- Case WHEN p_card_type = 'EGC/VEGC' THEN CARD_TYPE in ('EGC', 'VEGC') else CARD_TYPE in (p_card_type) End
- CARD_TYPE in Case WHEN p_card_type = 'EGC/VEGC' THEN ('EGC', 'VEGC') else (p_card_type) End
- CARD_TYPE in Case p_card_type WHEN 'EGC/VEGC' THEN ('EGC', 'VEGC') else (p_card_type) End
我得到的错误是
ORA-06550: PL/SQL: ORA-00905: 缺少关键字
ORA-06550: PL/SQL: SQL 语句被忽略
非常感谢对此的任何帮助。非常感谢。
这是对索引最友好的解决方案:
SELECT *
FROM mytable
WHERE p_card_type = 'EGC/VEGC'
AND card_type IN ('EGC', 'VEGC')
UNION ALL
SELECT *
FROM mytable
WHERE p_card_type <> 'EGC/VEGC'
AND card_type = p_card_type
您可以用一些布尔逻辑以更易读的方式重写您的查询:
SELECT *
FROM table
WHERE
( p_card_type ='EGC/VEGC' AND CARD_TYPE in ('EGC', 'VEGC') )
OR
( ...)
我有一个过程,它有一个输入参数 p_card_type。根据输入参数,where 子句发生变化。这是查询的样子。我有 4 个不同的选项,但它们都出错了。
SELECT * FROM table WHERE CARD_TYPE in (p_card_type)
--这是我尝试过的4个选项。
SELECT * FROM table WHERE
- Case p_card_type when 'EGC/VEGC' THEN CARD_TYPE in ('EGC', 'VEGC') else CARD_TYPE in (p_card_type) End
- Case WHEN p_card_type = 'EGC/VEGC' THEN CARD_TYPE in ('EGC', 'VEGC') else CARD_TYPE in (p_card_type) End
- CARD_TYPE in Case WHEN p_card_type = 'EGC/VEGC' THEN ('EGC', 'VEGC') else (p_card_type) End
- CARD_TYPE in Case p_card_type WHEN 'EGC/VEGC' THEN ('EGC', 'VEGC') else (p_card_type) End
我得到的错误是 ORA-06550: PL/SQL: ORA-00905: 缺少关键字 ORA-06550: PL/SQL: SQL 语句被忽略
非常感谢对此的任何帮助。非常感谢。
这是对索引最友好的解决方案:
SELECT *
FROM mytable
WHERE p_card_type = 'EGC/VEGC'
AND card_type IN ('EGC', 'VEGC')
UNION ALL
SELECT *
FROM mytable
WHERE p_card_type <> 'EGC/VEGC'
AND card_type = p_card_type
您可以用一些布尔逻辑以更易读的方式重写您的查询:
SELECT *
FROM table
WHERE
( p_card_type ='EGC/VEGC' AND CARD_TYPE in ('EGC', 'VEGC') )
OR
( ...)