首页 文章

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

提问于
浏览
1

如果在oracle中的select查询中传递null值,则处理可选参数的最佳方法是什么

例如 . select * from emp where deptno = 10 and empno in (7782,7934)

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

2 回答

  • 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);
    
  • 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>
    

    (查询params为正确性而添加)

相关问题