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 语句中返回一个列表的主要内容,如果未能解决你的问题,请参考以下文章