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