好吧如果我正在写这样的SQL语句:
select employee, deptno, data, lead
from emp
where emp.deptid = dept.deptid
和
deptno =:p_department_no
以上是一个例子,所以如果我通过部门没有,请务必忽略任何错误:10如果我将参数列留空,它将显示dept 10列表它显示空记录。如果我没有传递任何参数,我想查看所有记录。
答案 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)