|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
Доброго дня господа ! Имею запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Можно ли дать указание запросу работать по короткому условию констант (T1.F1=1) если это условие истинно, не обращаться к таблице T2 И как это проверить Спасибо ! Мысль такая Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 21:10 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
HOME_X Можно ли дать указание запросу работать по короткому условию констант (T1.F1=1) если это условие истинно, не обращаться к таблице T2 И как это проверить CASE: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
как это проверить: Код: plsql 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. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 21:38 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
SY, Понял Вас ! Надеялся увидеть параметры настройки базы на манер Hint-ов У Delphi есть аналогичное - анализ короткой или полной логики условия Но так тоже подойдет ! Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 22:14 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
HOME_X Доброго дня господа ! Имею запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Можно ли дать указание запросу работать по короткому условию констант (T1.F1=1) если это условие истинно, не обращаться к таблице T2 И как это проверить Этот запрос будет выполняться именно так, как Вам нужно: в первую очередь производится проверка условий, в которых сравнение с константами, в т.ч. IS [NOT] NULL, потом уже выполнение подзапросов, вызовы функций и т.п. Независимо от порядка этих условий в WHERE. Где это прочитать в доке - так с ходу не вспомню. Проверить можно примерами на разных исходных данных, вроде тех, что SY ниже написал. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 22:41 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
Кстати, MSSQL в подзапросах [NOT] EXISTS игнорирует всё, что перечислено в его SELECT (может быть это регулируется параметрами - тут не скажу, не знаю), т.е. можно написать что-то вроде "where exists (select 1/0 from ...)" и это не вызовет ошибку "divisor is equal to zero". Возможно Oracle в какой-то версии это тоже сделает (или уже сделал). Исходя из этого, я бы для проверки того, выполняется подзапрос или нет добавил бы условие в WHERE подзапроса, что-то вроде "and T2.F1 / 0 > 0" ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 22:52 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
ASNexus Кстати, MSSQL в подзапросах [NOT] EXISTS игнорирует всё, что перечислено в его SELECT (может быть это регулируется параметрами - тут не скажу, не знаю), т.е. можно написать что-то вроде "where exists (select 1/0 from ...)" и это не вызовет ошибку "divisor is equal to zero". Возможно Oracle в какой-то версии это тоже сделает (или уже сделал). Исходя из этого, я бы для проверки того, выполняется подзапрос или нет добавил бы условие в WHERE подзапроса, что-то вроде "and T2.F1 / 0 > 0" Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Предполагаю, что в предыдущих версиях Oracle Database было такое же поведение, поскольку не имеет значения, что будет в списке выборки кореллированного подзапроса. Лично я обычно там ставлю * (звездочку). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 23:47 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
ASNexus Кстати, MSSQL в подзапросах [NOT] EXISTS игнорирует всё, что перечислено в его SELECT ASNexus "where exists (select 1/0 from ...)" и это не вызовет ошибку "divisor is equal to zero" ASNexus я бы для проверки того, выполняется подзапрос или нет добавил бы условие в WHERE подзапроса, что-то вроде "and T2.F1 / 0 > 0" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 01:30 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
Sayan Malakshinov, В качестве проверки использовал поль. функцию , в которую передаю уникальное значение записи и это значение выводиться в консоль В целом процесс отслеживается Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
ASNexus Насчет последовательности - Вы правы - первично идут константы. Ссылка на таблицу в последную очередь Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 21:31 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
HOME_X, когда вы добавили and MyFunc(T1.F3)=1 то получили совершенно другой запрос ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 00:08 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
HOME_X Насчет последовательности - Вы правы - первично идут константы. Ссылка на таблицу в последную очередь ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 00:08 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
HOME_X В качестве проверки использовал поль. функцию если T2.F1=T1.F3 == FALSE, то ф-цию можно и не вызывать ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 10:59 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
HOME_X Sayan Malakshinov, В качестве проверки использовал поль. функцию , в которую передаю уникальное значение записи и это значение выводиться в консоль В целом процесс отслеживается Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 17:35 |
|
Предикат по короткому условию
|
|||
---|---|---|---|
#18+
Sayan Malakshinov введение в запрос функций может заблокировать трансформации. Например, может быть заблокирован join/subquery elimination при FK - тогда без функции подзапрос бы не выполнялся, а из-за добавления функции ораклу придется его выполнять преследовал цель - отследить последовательность выполнения кода. Получил вполне ожидаемый результат - в продуктиве такого не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
21.02.2022, 23:33 |
|
|
start [/forum/topic.php?fid=52&msg=40135441&tid=1879495]: |
0ms |
get settings: |
15ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
313ms |
get tp. blocked users: |
2ms |
others: | 385ms |
total: | 798ms |
0 / 0 |