Получение правильного запроса select в oracle sql developer

#sql #string #oracle #where-clause

#sql #строка #Oracle #where-предложение

Вопрос:

У меня есть требование, при котором мне нужно показывать результаты на основе входной строки в отчете, извлекаемом из базы данных.

В нем есть поля ввода firstname, lastname и dob.

Пример: если я выполняю запрос с именем в поле firstname, а остальные 2 оставляю пустыми, я должен получить все результаты с этим именем и отобразить все 3 поля в отдельной таблице в отчете (учитывая также значения null в столбцах) .

Я ранее написал этот запрос —

 select * 
from Emp_table 
where f_fname like v_fname and f_lname like v_lname and f_dob like v_dob
  

Здесь v_fname — это —

v_fname: = случай, когда in_fname равно нулю, тогда ‘%’ else in_fname end;

(in_fname — значение входного запроса)

Но в этом случае, если какой-либо столбец имеет значение null (fname, lname или dob), запрос его не распознает.

Пожалуйста, предложите консолидированный запрос, который будет принимать все 3 значения — ‘%’, null или входное значение.

Пример —

Пример ввода

Пример вывода

Пустые значения, приведенные в образце выходных данных, извлекаются из базы данных и являются нулевыми.

Комментарии:

1. Примеры данных и ожидаемый результат вместе со структурой таблицы в текстовом формате были бы полезны

2. Как и предлагал @Sujitmohanty30, любезно предоставьте примеры входных и выходных данных. Объясните, как получить ожидаемый результат из ваших входных данных. Затем вы получите код для получения ожидаемого результата.

3. Добавлен пример ввода и вывода

Ответ №1:

Вы можете четко указывать null значения параметров:

 select * 
from emp_table 
where 
        (v_fname is null or f_fname like v_fname)
    and (v_lname is null or f_lname like v_lname)
    and (v_dob   is null or f_dob   like v_dob)
  

Если параметру присвоено null значение, принимается любое значение (включая null значения). Если значение параметра равно '%' , то допускается все, что угодно, кроме null значений. Любое другое значение принимается в качестве литерального фильтра.

Однако имейте в виду, что если параметр имеет встроенный знак процента, они будут интерпретироваться как символы подстановки. Это может быть или не быть тем, что вы хотите.

Комментарии:

1. Если я даю f_lname в качестве входного запроса, его извлекаемые записи с f_lname, а также те записи, где f_lname, f_fname и f_dob все равны нулю, или f_fname, f_lname равны нулю и т.д..

2. @ananya0208: Как сказал GMB: просто четко указывайте значения null. Если вам нужно другое правило, показанное GMB, затем примените это другое правило. Может быть, вы хотите (f_fname like v_fname or (v_fname is null and f_fname is null)) and ... .

3. Я привел пример ввода и вывода, просто нужно получить результаты таким образом — указав имя ввода, и результаты, которые извлекаются, могут содержать нулевые / ненулевые значения для других столбцов.

4. @ananya0208: Оба предложения GMB и my WHERE будут выбирать образцы строк, которые вы показываете. Возможно, вам нужно показать лучший пример (и в виде текста, а не в виде изображений, пожалуйста), показывающий не только параметры и результат, но и данные таблицы. И в любом случае, что мешает вам изменить наши WHERE предложения, чтобы они соответствовали правилам, которые вы имеете в виду? Вы понимаете наши WHERE предложения? Или в них есть что-то, чего вы не понимаете?