PL/SQL 在 CASE 语句中返回一个列表

Posted

技术标签:

【中文标题】PL/SQL 在 CASE 语句中返回一个列表【英文标题】:PL/SQL returning a list in a CASE statement 【发布时间】:2017-06-02 04:00:56 【问题描述】:

我需要一个 CASE 语句来返回一个字符串列表,但我遇到了一些语法问题。生成的 SQL 应该是这样的:

SELECT * FROM FRUIT WHERE COLOR IN ('RED', 'YELLOW')

我正在尝试做的事情(这不起作用):

SELECT * FROM FRUIT WHERE COLOR IN
CASE
    WHEN TYPE = *something*
    THEN ('RED', 'YELLOW')
    ELSE ('GREEN')
END

这行得通:

SELECT * FROM FRUIT WHERE COLOR IN
CASE
    WHEN TYPE = 1
    THEN 'RED'
    ELSE 'GREEN'
END

我得到的错误:

ORA-00907 missing right parenthesis

当我使用多个 COLOR = 'X' OR COLOR = 'Y' 时它可以工作,但我想知道是否有一种方法可以只使用一个 CASE 语句。提前致谢。

【问题讨论】:

只使用布尔逻辑代替。使用 case 表达式没有优势。 为什么不使用联合?当您需要从一个表中查询但使用 case where 子句时 - 联合是最常见的方式。 你的预期输出是什么? @Used_By_Already 是的,我会采用这种方法。谢谢。 @Ychdziu 我正在处理的真正的 SQL 表达式比这个示例要长得多,所以我想要一个更小、更易于维护的表达式。谢谢你的回复。 【参考方案1】:

Case 语句只能返回一个值。我觉得你不需要CASE声明,你可以用IN操作代替Case,像这样

SELECT * 
FROM FRUIT 
WHERE TYPE = 'something'  AND COLOR IN ('RED', 'YELLOW') 
OR TYPE <> 'something'  AND COLOR IN ('GREEN') 

【讨论】:

哦,我明白了。我将使用这种方法。谢谢,我会接受你的回答。

以上是关于PL/SQL 在 CASE 语句中返回一个列表的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 中 CASE 语句中的堆栈条件

PL/SQL 触发器中的 SELECT 语句返回 null

在oracle sql语句里有没有if...else...的用法,请各位大侠给个例子看看,灰常感谢!!

我在 PL SQL 中的 CASE 语句有啥问题?

case表达式的用法

PL/SQL预定义异常