Лучший способ обработать необязательный параметр с нулевым значением в запросе - PullRequest
1 голос
/ 16 декабря 2011

Каков наилучший способ обработки необязательного параметра, если нулевое значение передается в запросе выбора в oracle

Например: select * from emp where deptno = 10 and empno in (7782,7934)

В приведенном выше запросе, если пользователь не выберет empnoон должен получить все записи, где deptno = 10

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Обычно я рассматриваю этот случай в среде программирования, которая выдает запрос. В коде я проверяю нулевой регистр, а затем исключаю эту часть предложения 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>

(для корректности добавлены параметры запроса)

0 голосов
/ 19 декабря 2011

Вот немного грязное решение вашей проблемы, если вы просто хотите вставить значение в строку:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...