powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сформировать красиво запрос.
11 сообщений из 11, страница 1 из 1
Как сформировать красиво запрос.
    #39517460
orcl_1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.

Есть такая задача:
Процедура, на вход которой подается набор параметров, должна возвращать результат запроса. Передаваемые параметры по сути это условия для where. Т.е. нужно динамически сформировать запрос, который будет использовать передаваемые параметры (параметры либо имеют значения либо пустые) как бинд переменные.
Такие варианты как конкатенация и использование case с кучей вариантов запроса не желательна. Может есть средства oracle реализующие такое формирование запроса?
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517473
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orcl_1989,

p_id - входящий параметр.
Код: plsql
1.
Where (id = p_id or p_id is null)



Динамические запросы в неумелых руках потенциальный sql injection
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517479
orcl_1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p_id - входящий параметр.
Where (id = p_id or p_id is null)

Если параметр null, то в условии where его вообще не должно быть.
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517498
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orcl_1989,

если Вы правильно прочтете написанное выше, то скобка всегда выдаст True если p_id is null - и как следствие выражение в скобках не будет влиять на запрос (как будто ее и нет вовсе)
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517508
Vint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,
представь что параметров десяток. и представь как будут использоваться индексы при таком написании?

orcl_1989
pipelined функции в которых динамически строится и выполняется запрос, если я правильно понял набор столбцов не меняется. поэтому pipe пройдет без проблем.
второй вариант ref cursorы возвращаемые клиенту.
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517548
orcl_1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
при использовании Where (id = p_id or p_id is null)

запрос выполняется дольше на порядок, по с равнению с запросом где условия указаны жестко.
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517550
п_ид ор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXLp_id - входящий параметр.
Код: plsql
1.
Where (id = p_id or p_id is null)

поосторожнее с идентификаторами и предикатами.
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517579
Фотография Takurava
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orcl_1989, в общем случае можно написать для правильного использования индексов
Код: plsql
1.
2.
3.
select * from table where p1_val = p1 and p1 is not null
union all
select * from table where p2_val = p2 and p2 is not null


а в данном случае задача вменяемого решения не имеет.
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517589
orcl_1989
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Была такая идея, но отказались.
Почитаю про pipelined функции, может так получится.
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517691
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orcl_1989при использовании Where (id = p_id or p_id is null)

запрос выполняется дольше на порядок, по с равнению с запросом где условия указаны жестко.

т.к. задача поставленна про сфирического коня в вакууме, попробуйте так
Код: plsql
1.
Where id = nvl(p_id,id)
...
Рейтинг: 0 / 0
Как сформировать красиво запрос.
    #39517856
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orcl_1989Привет всем.

Есть такая задача:
Процедура, на вход которой подается набор параметров, должна возвращать результат запроса. Передаваемые параметры по сути это условия для where. Т.е. нужно динамически сформировать запрос, который будет использовать передаваемые параметры (параметры либо имеют значения либо пустые) как бинд переменные.
Такие варианты как конкатенация и использование case с кучей вариантов запроса не желательна. Может есть средства oracle реализующие такое формирование запроса?
соберите WHERE где-то снаружи, где пустые параметры в массив не попадают
и передайте сразу WHERE
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как сформировать красиво запрос.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]