如果我没有提到值,则应忽略SQL中的参数

时间:2018-02-12 17:28:24

标签: sql oracle

好吧如果我正在写这样的SQL语句:

select employee, deptno, data, lead 
from emp 
where emp.deptid = dept.deptid

deptno =:p_department_no

以上是一个例子,所以如果我通过部门没有,请务必忽略任何错误:10如果我将参数列留空,它将显示dept 10列表它显示空记录。如果我没有传递任何参数,我想查看所有记录。

1 个答案:

答案 0 :(得分:3)

如果您为参数null传递p_department_no值(,当您没有值时),您可以使用COALESCE进行第二次比较WHERE中的语句始终评估为true。仅当deptno列不可为空时,这将起作用,就好像存在空值,表达式将为这些记录评估为false。

SELECT employee, deptno, data, lead 
FROM emp 
WHERE emp.deptid = dept.deptid
AND deptno = COALESCE(:p_department_no, deptno)

如果您在列deptno上有索引,则从以下评论中获取相关内容:

  

@WilliamRobertson - 如果使用NVL代替COALESCE,您可以利用优化,执行将在运行时使用索引,如果:p_department_no不为null。

生成的sql语句将是:

SELECT employee, deptno, data, lead 
FROM emp 
WHERE emp.deptid = dept.deptid
AND deptno = NVL(:p_department_no, deptno)