我正在尝试实现如下所示的查询
SELECT *
FROM emp
WHERE LOWER (ename) IN LOWER ('A', 'b', 'C', 'd','eF','GG','Hh');
但是收到错误
ORA-00909: invalid number of arguments.
是否有任何特定的功能可以比较具有小写的'IN'子句中的多个参数?
答案 0 :(得分:4)
@Muhammad Muazzam说得对,但如果出于某种原因你真的需要在右侧使用LOWER来获得值列表,那么你可以这样做:
select ename from emp
where lower(ename) in
(select lower(column_value)
from table(SYS.KU$_VCNT('A','B','C','D'))
);
SYS.KU$_VCNT
是VARCHAR2(4000)类型的表,它应该已存在于您的数据库中。
答案 1 :(得分:2)
将查询更改为:
SELECT *
FROM emp
WHERE LOWER (ename) IN ('a', 'b', 'c', 'd');
答案 2 :(得分:1)
我建议你这样说出这样的问题:
SELECT *
FROM emp
WHERE ename IN ('A', 'B', 'C', 'D', 'a', 'b', 'c', 'd');
这允许Oracle在ename
上使用索引。注意:Oracle确实允许对表达式建立索引,因此您可以在lower(ename)
上建立索引并使用:
SELECT *
FROM emp
WHERE ename IN (lower('A'), lower('B'), lower('C'), lower('D'));