如果在oracle
中的select查询中传递了null值,那么处理可选参数的最佳方法是什么 E.g。 select * from emp where deptno = 10 and empno in (7782,7934)
在上面的查询中,如果用户不选择任何empno,那么它应该获取deptno = 10的所有记录
答案 0 :(得分:1)
通常我会在发出查询的编程环境中处理这种情况。在代码中,我检查null case,然后根据需要排除where子句的那一部分。那是你可以做的吗?
修改的
如果您使用的是ColdFusion:
<cfquery>
select
*
from
emp
where
deptno = 10
<cfif Len(empno)>
and empno in (<cfqueryparam value="#empno#" list="true" cfsqltype="cf_sql_integer">)
</cfif>
</cfquery>
(为正确性添加了查询参数)
答案 1 :(得分:0)
如果您只是想将值存入字符串,这里有一个有点脏的解决方案:
SELECT *
FROM emp
WHERE
deptno = 10
AND (empno IN (%user_input%,%not_used_value%)
OR COALESCE(%user_input%,NULL) IS NULL);
此处%user_input%
是值的占位符,由用户选择,%not_used_value%
为empno
id,从未使用过。
因此,生成的查询可能如下所示:
SELECT *
FROM emp
WHERE
deptno = 10
AND (empno IN (7782,7934,-999)
OR COALESCE(7782,7934,NULL) IS NULL);