在 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
     ( ...)