|
|
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
Привет всем. Есть такая задача: Процедура, на вход которой подается набор параметров, должна возвращать результат запроса. Передаваемые параметры по сути это условия для where. Т.е. нужно динамически сформировать запрос, который будет использовать передаваемые параметры (параметры либо имеют значения либо пустые) как бинд переменные. Такие варианты как конкатенация и использование case с кучей вариантов запроса не желательна. Может есть средства oracle реализующие такое формирование запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 15:28 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
orcl_1989, p_id - входящий параметр. Код: plsql 1. Динамические запросы в неумелых руках потенциальный sql injection ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 15:34 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
p_id - входящий параметр. Where (id = p_id or p_id is null) Если параметр null, то в условии where его вообще не должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 15:40 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
orcl_1989, если Вы правильно прочтете написанное выше, то скобка всегда выдаст True если p_id is null - и как следствие выражение в скобках не будет влиять на запрос (как будто ее и нет вовсе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 15:48 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
MaximaXXL, представь что параметров десяток. и представь как будут использоваться индексы при таком написании? orcl_1989 pipelined функции в которых динамически строится и выполняется запрос, если я правильно понял набор столбцов не меняется. поэтому pipe пройдет без проблем. второй вариант ref cursorы возвращаемые клиенту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 15:58 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
при использовании Where (id = p_id or p_id is null) запрос выполняется дольше на порядок, по с равнению с запросом где условия указаны жестко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 16:30 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
MaximaXXLp_id - входящий параметр. Код: plsql 1. поосторожнее с идентификаторами и предикатами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 16:32 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
orcl_1989, в общем случае можно написать для правильного использования индексов Код: plsql 1. 2. 3. а в данном случае задача вменяемого решения не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 16:53 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
Была такая идея, но отказались. Почитаю про pipelined функции, может так получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 17:01 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
orcl_1989при использовании Where (id = p_id or p_id is null) запрос выполняется дольше на порядок, по с равнению с запросом где условия указаны жестко. т.к. задача поставленна про сфирического коня в вакууме, попробуйте так Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2017, 18:59 |
|
||
|
Как сформировать красиво запрос.
|
|||
|---|---|---|---|
|
#18+
orcl_1989Привет всем. Есть такая задача: Процедура, на вход которой подается набор параметров, должна возвращать результат запроса. Передаваемые параметры по сути это условия для where. Т.е. нужно динамически сформировать запрос, который будет использовать передаваемые параметры (параметры либо имеют значения либо пустые) как бинд переменные. Такие варианты как конкатенация и использование case с кучей вариантов запроса не желательна. Может есть средства oracle реализующие такое формирование запроса? соберите WHERE где-то снаружи, где пустые параметры в массив не попадают и передайте сразу WHERE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 00:55 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39517508&tid=1885299]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 534ms |

| 0 / 0 |
