在查询中使用null值处理可选参数的最佳方法

时间:2011-12-16 07:40:55

标签: sql oracle

如果在oracle

中的select查询中传递了null值,那么处理可选参数的最佳方法是什么

E.g。 select * from emp where deptno = 10 and empno in (7782,7934)

在上面的查询中,如果用户不选择任何empno,那么它应该获取deptno = 10的所有记录

2 个答案:

答案 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);