oracle中where子句的case语句中传递多个值

马克

我需要从用户那里获取输入,该输入将传递给查询并与现有值 AA 进行比较。如果是 AA,则将选择 ABC 模式。

下面的查询工作正常,

select distinct a.TABLE_OWNER,a.table_name,a.index_name,b.column_name
from dba_indexes a, dba_ind_columns b
where a.index_name=b.index_name 
and a.table_name = b.table_name
and a.table_owner in ( case when &user_input = 'AA' then 'ABC' end )
order by 1,2,3,4; 

但是如果我不得不再提一个模式名称,例如 DEF,我将如何做。我尝试使用逗号,但它抛出错误,“缺少右括号”

select distinct a.TABLE_OWNER,a.table_name,a.index_name,b.column_name
from dba_indexes a, dba_ind_columns b
where a.index_name=b.index_name 
and a.table_name = b.table_name
and a.table_owner in ( case when &user_input = 'AA' then 'ABC','DEF' end )
order by 1,2,3,4; 

错误

ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"
*Cause:    
*Action:
Error at Line: 5 Column: 63

我从 Ask Tom 网站上读到,只能返回一个标量值,是否可以返回一堆值?

数学小子

这是在 WHERE 子句中使用 CASE 的正确方法。

...
and case &user_input when 'AA' then case when a.table_owner in ('ABC', DEF') then 1 end
                     else           case when <your other conditions here>   then 1 end
    end
    = 1

这个怎么运作:

首先&user_input与“AA”进行比较。如果为真,a.table_owner则与 'ABC' 和 'DEF' 进行比较,如果是其中之一,则CASE表达式的值为 1,否则为 NULL(默认情况下)。如果&user_input不是 'AA'(也可能是 NULL),则评估您未说明的其他条件,如果为真,则CASE表达式的计算结果为 1,否则为 NULL。

然后将CASE表达式的结果与数字 1 进行比较。

一个好处是:如果“其他条件”很昂贵(大量计算,诸如此类),则&user_input由于短路评估,如果是“AA”,则这种安排保证它们不会被执行你有没有这样的控制,如果你写的条件ANDOR经营者独自一人。

还要注意外部 CASE 中 CASE 表达式的嵌套 - 这在许多情况下是完全有效和有用的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在where子句中使用Case语句选择多个值

来自分类Dev

mysql中where子句中的CASE语句

来自分类Dev

Oracle SQL:where子句中的Case语句返回错误“单行子查询返回多个行”

来自分类Dev

CASE语句中的WHERE子句

来自分类Dev

where子句中的if / case语句

来自分类Dev

SQL语句where子句中的case语句

来自分类Dev

使用 IN 语句的 Where 子句中的 Case 语句

来自分类Dev

where 子句中的 case 表达式包含多个值

来自分类Dev

在SQL中的where子句中的语句之间获取多个列

来自分类Dev

SQL查询的WHERE子句中的CASE语句

来自分类Dev

Where子句中的参数Case语句

来自分类Dev

使用case语句或如果WHERE子句中

来自分类Dev

SQL:WHERE子句中的IF / CASE语句

来自分类Dev

在where子句中使用case语句

来自分类Dev

WHERE 子句中的 MDX case 语句

来自分类Dev

在 where 子句中加入的 Case 语句

来自分类Dev

在Oracle中的select语句“ in”子句中按值顺序排序

来自分类Dev

Android SQL语句中的多个Where子句

来自分类Dev

SQL where子句中大于或小于case语句的子句

来自分类Dev

WHERE 子句中 CASE 语句中的 BETWEEN 问题

来自分类Dev

如何在Ruby中的when子句中编写带有多个语句的case语句?

来自分类Dev

返回结果集的 where 子句中的 case 语句包含空值

来自分类Dev

Oracle中Case语句中的Select语句

来自分类Dev

如何从Where条件中的CASE子句返回多个值

来自分类Dev

sqlserver中where子句中的case语句,其他情况始终为true

来自分类Dev

where子句中的多个AND

来自分类Dev

SQL在WHERE IN子句中使用CASE语句

来自分类Dev

如何在WHERE子句CASE语句中返回多列

来自分类Dev

WHERE子句中的case语句,以列名为条件

Related 相关文章

热门标签

归档