Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
Вопрос глупый, ну так уж получилось, будет время быстренько ответить - буду благодарен. Есть запрос обычный в процедур и есть входящий параметры процедуры. Условие задачи - необходимо обойти условие where, если параметр процедуры равен 0, и выполнить поиск, если <> 0. Условно говоря, есть такой запрос: CREATE PROCEDURE GET_FILTER ( IN SUPPLIERINPUT INTEGER) select * from test_table tt where SUPPLIERINPUT in (0, tt.suppl) SUPPLIERINPUT м.б. 0 или не 0. можно ли как-то обойти, чтобы where не запускалось (но без использования динамического sql). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 13:37 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
Александр Тарасенко, по такому описанию можно предположить, что нужен просто or с этим параметром,типа where PARAM in () or (PARAM=0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 13:55 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
Александр Тарасенко, Лучше использовать динамику. Вы можете, конечно, заставить процедуру собраться с reopt always опцией типа: call sysproc.set_routine_opts('reopt always')@ create procedure ... @ и посмотреть план запроса (в секции "Optimized Statement") из кэша запросов после каждого вызова процедуры, чтобы проверить, будет ли оптимизатор при каждом вызове в зависимости от значения параметра по-разному переписывать этот запрос (вроде должен, но лучше проверить). Но все равно минус такого подхода в том, что все статические запросы процедуры будут выполняться в таком режиме, а это можнт быть неоптимально. Да и для этого запроса лучше, если для него в кэше будут только 2 запроса, а не перекомпиляция его каждый раз при вызове... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 14:22 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
Вариант - использовать два разных статических запроса, применяя нужный по обстоятельствам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2014, 15:54 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
А если использовать union из 2 похожих запросов с разницей в WHERE и условием param=0 и во втором param=1 может будет быстрее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2014, 01:51 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
Александр Тарасенко, select * from test_table tt where ( CASE SUPPLIERINPUT when 0 then 0 else 1 end = 0) or SUPPLIERINPUT = t.suppl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 10:56 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
Александр Тарасенко, Вот, даже работает! на базе SAMPLE (9.7 Windows) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 11:28 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
knudsen Код: sql 1. 2. 3. 4. 5. 6. is equal to: (SUPPLIERINPUT = 0) or (deptnumb = SUPPLIERINPUT) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 14:23 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
or_or_or_, таки, да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 14:55 |
|
||
|
Обход условия where в запросе (без динамического SQL)
|
|||
|---|---|---|---|
|
#18+
А чем плох мой вариант? Оптимизатор по идее 1 из подзапросов должен отвергнуть, т. к. статический параметр изначально будет не равен одному из условий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2014, 23:15 |
|
||
|
|

start [/forum/topic.php?fid=43&tid=1601045]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 183ms |

| 0 / 0 |
