Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Искал решение одного вопроса и наткнулся на сообщение Влада Хорсуна (правильно перевёл?) о том, что он хотел внести предложение использовать конструкцию execute block в CTE. Однако больше об этом что-то ничего нигде не упоминалось (гугл не нашел). Вот интересно: в данном направлении есть какие-нибудь движения? Или решили что это пижонство? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 11:47 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий Соболев, не видел такого. А для чего это потребовалось. Может есть другие способы решения. Например в тройке внутри EXECUTE BLOCK разрешено в секции DECLARE объявлять локальные подпроцедуры и подфункции. P.S. В 12 оракле что типа такого есть Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 12:06 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий Соболевв данном направлении есть какие-нибудь движения?Пока нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 12:21 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Требовалось сделать выборку из таблиц на основе другой таблицы, и к результату применить группировку с агрегацией. Один из вариантов - дополнительная ХП. Не хотелось её рисовать, но, видимо, никуда не денешься, придёться ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 14:47 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Говнодизайн БД detected. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2014, 14:58 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Возвращаяст к говнодизайну (переделывать никто не даст). Этот проект - журнал ремонтов оборудования на заводе. Есть таблица ремонтов. Она активно использует справочники и немного уникальной информации, как-то дата проведения ремонта, тип работ и другие мелочи (поля - указатели на соответствующие записи в справочниках). Так-же есть пара вспомогательных таблиц на орбите, данные которых соотносятся с таблицей ремонтов в отношении многие ко многим. Справочник оборудования выполнен в виде дерева вида: ID_оборудования, ID_предка, название_оборудования, другие_мелочи. Нужно получить аггрегированную информацию (sum, count) из этих орбитальных таблиц причем с ограничением по конкретному оборудованию и конкретному пользователю. При атаке "в лоб" - вывод данных за месяц по одному параметру производится от 1 минуты до 4, при этом в месяц происходит примерно 700-1000 ремонтов. Это неприемлимо долго. Выяснил, что поиск по оборудованию от корня к листьям в данном случае не подходит. Обратный поиск заметно быстрее, но тогда возникает проблема с аггрегацией данных в рамках одного запроса/одной ХП. Текущее решение состоит из ХП выдающей промежуточный результат, и SQL запроса, собирающий итог из данных возвращаемых этой ХП. В ХП имеется 2 вложенных for select. Вопрос: можно ли не прибегая к внешним запросам или ХП, в рамках одной процедуры получить агрегированные данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 10:28 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий Соболев, ты запросик сюда кинь, может чего и подскажут. Необязательно свой оригинальный запрос. Можно что попроще для примера. В тройке можно попробовать через оконные функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 10:35 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Переработанный вариант общего итога (без орбитальных таблиц) Хранимка: Код: 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. ну и запрос соответствующий Код: sql 1. 2. 3. Хранимка (долгий вариант) для одной из орбитальных таблиц: Код: 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. сломал уже голову, как можно это переделать чтобы быстро работало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 10:51 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий Соболев, кто тебе мешает считать суммы в самом цикле for select, а потом просто лишний suspend воткнуть типа такого Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 11:50 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, да собственно, ничего не мешает. Была такая мысль. Вот только не помню, почему не реализовал (отказался). Это наверно от усталости. Надо отпуск брать и в горы уходить на недели две... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 11:59 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Вспомнил почему! o_dev_id и v_dev_id они разные и o_dev_id не идут подряд. Значит надо организовывать что-то вроде массива, что не есть хорошо. Сервер сам как-то это считает (наверно сортирует результат). Вот и как мне организовать эту сортировку? Там разброс может равновероятным на всем отрезке. И с повторами само собой. В общем не получится внутри второго цикла это считать ибо сортировку не сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 12:10 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий Соболев, можно сначала загнать предварительные результаты в GTT и затем считать по ней или в трёшке использовать SUM(PARTITION BY <нужные поля группировки>) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 12:13 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, трёшка пока не рассматривается совсем (бета, и переносить проект - отдельный вопрос, возможно получиться и дизайн сменить), а вот насчет GTT - что-то не получается. Мож чего не правильно делал? Можно пример, стопудово рабочий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 12:38 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий Соболев, а в чём проблема. Создаёшь GTT нужной структуры. GTT создаётся заранее а не динамически в ХП. Затем делаем так INSERT INTO MY_GTT(<поля>) SELECT ... // твой сложный запрос и далее SELECT ... FROM MY_GTT // с нужными обработками тут главный плюс MY_GTT можно соединять много раз и при этом сложный запрос не перевыполняется. Т.е. в данном случае мы используем GTT в качестве материализации того сложного запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 12:47 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, А эта GTT создается одна на всех пользюков, или для каждого своя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 12:54 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий Соболев, Одна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 13:02 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий СоболевА эта GTT создается одна на всех пользюков, или для каждого своя?Метаданные одни на всех, но данные каждые видит строго свои (своей транзакции или своего коннекта, как настроишь). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 13:22 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий СоболевВот и как мне организовать эту сортировку?Ты удивишься, но - с ORDER BY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 14:49 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
hvladАртемий СоболевВот и как мне организовать эту сортировку?Ты удивишься, но - с ORDER BY Спасибо, К.О.! Вот может ко всему подскажете, как организовать сортировку на вложенном for select для всего набора? (по входным данным из первого for select) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 15:04 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий СоболевВот может ко всему подскажетеЕсли бы в твоём описании можно было хоть что-то понять (меньше чем за полдня и без 100 грамм) - то может и подсказал бы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 15:49 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
hvladАртемий СоболевВот может ко всему подскажетеЕсли бы в твоём описании можно было хоть что-то понять (меньше чем за полдня и без 100 грамм) - то может и подсказал бы Прошу прощения за сумбур в описании. в сообщении 17552771 в первом скрипте видны два цикла. Допустим в первом цикле выходят значения 78, 67, 98, 45... во вложенном втором цикле КАЖДОМУ значению соответствует ровно 1 значение, пусть будет например 1, 7, 14, 7 соответственно. мне нужно сделать сортировку (группирование) значений из внешнего цикла по значениям внутреннего цикла. Как видно, 7 встречается 2 раза, соответственно на выходе должно быть три строки 1, 7, 14. Для семерки должны состоятся суммирования. Вот не выходя за пределы одной ХП и не используя вспомогательную ХП каким образом сделать подсчеты, ну или сортировку для подсчетов вручную. В свете GTT получается достаточно приемлемый вариант. Только надо озаботиться очисткой и другими безобразиями перед использованием. Но тогда ещё вопрос: кто и когда должен озаботиться удалением этой таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 16:36 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий Соболевещё вопрос: кто и когда должен озаботиться удалением этой таблицы? Никто и никогда. Почитай уже доку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 16:44 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий СоболевВ свете GTT получается достаточно приемлемый вариант. Только надо озаботиться очисткой и другими безобразиями перед использованием. Но тогда ещё вопрос: кто и когда должен озаботиться удалением этой таблицы? Ты когда создаешь GTT - указываешь, когда данные в ней должны быть убиты. А дальше сервер сам все сделает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 16:56 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Артемий СоболевТолько надо озаботиться очисткой и другими безобразиями перед использованием.Доку почитай уже. При старте транзации (или коннекта) таблица всегда чистая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2015, 20:57 |
|
||
|
with execute block
|
|||
|---|---|---|---|
|
#18+
Немножко отошли от топика в сторону GTT, но всетаки "with execute block (params)" это будет мощная штука, если будет. Незнаю если у Артемий прямо "Говнодизайн БД detected" но вот бы мне очень помогла такая конструкция, пока нету collateral joins. Вот для топика http://www.sql.ru/forum/1152604/mozhno-li-vypolnit-odnim-zaprosom оптимально не обошелся без доп процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2015, 08:53 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38944143&tid=1562885]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
188ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 305ms |

| 0 / 0 |
