2012-07-04 4 views
1

У меня есть запрос, как это:Возврат всех строк, если нулевое значение передается

select empno,name 
from emp 
where job = 'CLERK' 
and empno = :empno 

Если я прохожу EMPNO, которое нулевой Я хотел бы, чтобы отобразить все записи, которые соответствуют условию задания = «КЛЕРК» , Если empno - это конкретный номер, он должен фильтровать работу и empno.

В любом случае, чтобы сделать это в SQL без использования PLSQL?

ответ

5
and (empno = :empno or :empno is null) 
+1

Было бы лучше изменить порядок этих условий так, чтобы e нуль-проверка сначала оценивается? Даже если SQL-движок оптимизирует его в любом случае, я бы счел его более читаемым по-другому ... –

2

Что-то вроде этого, если параметр пасс нуль, чем заменить его фактическим значением столбца ...

select empno,name from emp where 
job = 'CLERK' 
and empno = NVL(:empno ,empno) 

Как NVL работа

Синтаксис функции NVL является:

NVL(string1, replace_with) 

string1 is the string to test for a null value. 

replace_with is the value returned if string1 is null. 
+0

Я бы этого не сделал. Его цель не очень ясна, так как она полагается на логическую эквивалентность «x = x», что сбивает с толку. Это также немного искажает логику, поскольку функциональность «NVL» неизвестна пользователю, который не знаком с этой функцией. Ответ Андомара гораздо яснее, поскольку он опирается только на описательные логические операторы. – Polynomial

+0

Вы протестировали это, я думаю, в oracle один null не равен другому null, так что это может не сработать –

Смежные вопросы