Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
Добрый день, извиняюсь за не очень точную формулировку вопроса в заголовке. То что интересует - есть процедура UDB для удаления большого количества записей. Удаление происходит в цикле. Время выполнения цикла может быть довольно продолжительным. Хотелось бы на клиента выводить какую-ту информация о прогрессе, например сообщать через каждые 10 000 записей, что очередная порция удалена. Вот только не знаю как это сделать. Я пробовал сделать курсор который возвращает значение переменной, присваивал ей разные значения, после чего открывал курсор в разных частях цикла. В результате всегда было только последнее значение. Делать несколько курсоров? Непонятно сколько их будет за цикл. Приходит на ум мысль в цикле помещать удалённое кол-во записей в специально созданную таблицу и читать из неё из приожения. Но тут сразу возникают сложности с многопоточностью. Может быть кто-нибудь сталкивался с подобной задачей и может подсказать какое-нибудь решение? Заранее большое спасибо за отклик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2009, 01:52 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. В v9.5.2+ вы можете использовать The administrative task scheduler . См. также процедуру ADMIN_TASK_ADD . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2009, 11:12 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinЗдравствуйте. В v9.5.2+ вы можете использовать The administrative task scheduler . См. также процедуру ADMIN_TASK_ADD . Добрый день, большое спасибо за отклик и за ссылки. Если я правильно понял administrative task scheduler позволяет выполнять разные запросы в разное время. Это не совсем то что я ищу. В моём случае - есть одна процедура которая удаляет из ряда таблиц, часть из которых довольно большие. Она может вызываться как из перлового скрипта так и просто пользователем. Т.к. время её выполнения довольно продолжительное, то я хотел бы выводить какие-нибудь промежуточные сообщения на экран. Я попробовал написать такую пробную процедуру, которая обновляет временную таблицу в цикле и которая создаёт 2 курсора смотрящие на эту таблицу. Она открывает 1й курсор до обновления и 2й после. Мой расчёт был на то, что 1й курсор будет открыт и возвращён на клиента до окончания цикла. К сожалению, кажется, выходит так, что процедура сначала отрабатывает и потом возвращает оба курсора с одинаковым набором данных. Вот мой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Может быть есть какая-нибудь возможность вернуть курсор на клиента до окончания работы процедуры. Например в Sybase если сделать select в процедуре, то результат будет сразу выдан на клиента после чего процедура продолжит работу. Я очень надеюсь найти возможность добиться подобного поведения от UDB. Заранее огромное спасибо за помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2009, 18:02 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
Kru[quot Mark Barinstein]Если я правильно понял administrative task scheduler позволяет выполнять разные запросы в разное время. Это не совсем то что я ищу. В моём случае - есть одна процедура которая удаляет из ряда таблиц, часть из которых довольно большие. Она может вызываться как из перлового скрипта так и просто пользователем. Т.к. время её выполнения довольно продолжительное, то я хотел бы выводить какие-нибудь промежуточные сообщения на экран.1. Вы в приложении создаёте задачу с помощью вызова ADMIN_TASK_ADD, чтоб она запустилась 1 раз как можно скорее - этот вызов проходит быстро. Ваша процедура может логировать результаты работы в таблицу. 2. Ваше приложение после этого циклически выводит информацию из этой таблицы пользователю. Вам не подходит такая реализация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2009, 18:26 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinKru[quot Mark Barinstein]Если я правильно понял administrative task scheduler позволяет выполнять разные запросы в разное время. Это не совсем то что я ищу. В моём случае - есть одна процедура которая удаляет из ряда таблиц, часть из которых довольно большие. Она может вызываться как из перлового скрипта так и просто пользователем. Т.к. время её выполнения довольно продолжительное, то я хотел бы выводить какие-нибудь промежуточные сообщения на экран.1. Вы в приложении создаёте задачу с помощью вызова ADMIN_TASK_ADD, чтоб она запустилась 1 раз как можно скорее - этот вызов проходит быстро. Ваша процедура может логировать результаты работы в таблицу. 2. Ваше приложение после этого циклически выводит информацию из этой таблицы пользователю. Вам не подходит такая реализация? Если я правильно понимаю предложенный подход, задача ADMIN_TASK_ADD заключается в том, чтобы читать из таблицы во время работы процедуры. Если так, то по сути нужно будет создавать 2 параллельных процесса - 1й запускает процедуру, 2й запускает ADMIN_TASK_ADD и выдаёт результаты. Так ли это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2009, 19:32 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
KruMark Barinstein1. Вы в приложении создаёте задачу с помощью вызова ADMIN_TASK_ADD, чтоб она запустилась 1 раз как можно скорее - этот вызов проходит быстро. Ваша процедура может логировать результаты работы в таблицу. 2. Ваше приложение после этого циклически выводит информацию из этой таблицы пользователю. Вам не подходит такая реализация? Если я правильно понимаю предложенный подход, задача ADMIN_TASK_ADD заключается в том, чтобы читать из таблицы во время работы процедуры. Если так, то по сути нужно будет создавать 2 параллельных процесса - 1й запускает процедуру, 2й запускает ADMIN_TASK_ADD и выдаёт результаты. Так ли это?Нет, не так. Задача ADMIN_TASK_ADD - запустить по расписанию вашу долгоиграющую процедуру. Т.е. рассматривайте эту процедуру как что-то типа unix cron. После того, как вы повесили запуск вашей процедуры по расписанию, вы через то же самое соединение в своей программе время от времени можете проверять результаты работы своей процедуры, которая эти самые результаты сохраняет в какой-то таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.06.2009, 09:41 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinKru Если я правильно понимаю предложенный подход, задача ADMIN_TASK_ADD заключается в том, чтобы читать из таблицы во время работы процедуры. Если так, то по сути нужно будет создавать 2 параллельных процесса - 1й запускает процедуру, 2й запускает ADMIN_TASK_ADD и выдаёт результаты. Так ли это? Нет, не так. Задача ADMIN_TASK_ADD - запустить по расписанию вашу долгоиграющую процедуру. Т.е. рассматривайте эту процедуру как что-то типа unix cron. После того, как вы повесили запуск вашей процедуры по расписанию, вы через то же самое соединение в своей программе время от времени можете проверять результаты работы своей процедуры, которая эти самые результаты сохраняет в какой-то таблице. Марк, огромное спасибо. Я теперь понял. Попробую запустить из Perl ADMIN_TASK_ADD и запрос к таблице в цикле. Ещё раз огромное спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2009, 17:39 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
Mark Barinstein Задача ADMIN_TASK_ADD - запустить по расписанию вашу долгоиграющую процедуру. Т.е. рассматривайте эту процедуру как что-то типа unix cron. После того, как вы повесили запуск вашей процедуры по расписанию, вы через то же самое соединение в своей программе время от времени можете проверять результаты работы своей процедуры, которая эти самые результаты сохраняет в какой-то таблице. Добрый день, я попробовал создать тестовую процедуру и задачу её вызывающую. К сожалению ничего не получилось. Задача хоть и создавалась, но процедуру она не вызывала. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Тоже, не могли бы Вы подсказать как пользоваться параметром procedure_input? Может быть есть пример задачи вызывающей процедуру с параметрами? Заранее большое спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2009, 19:35 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
Добрый день. Вопрос использования ADMIN_TASK_ADD стал теоретическим, т.к. админ не разрешил использовать эту возможность. Буду искать как пользоваться параллельно 2мя соединениями из Перла. Со своей стороны вопрос закрываю. Всем и особенно Марку, огромное спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2009, 20:23 |
|
||
|
UDB LUW: если процедура использует цикл, то как получить промежуточный результат
|
|||
|---|---|---|---|
|
#18+
KruТоже, не могли бы Вы подсказать как пользоваться параметром procedure_input? Может быть есть пример задачи вызывающей процедуру с параметрами?Если всё ещё интересно: Читаем про The administrative task scheduler и настраиваем его, как там написано. Пусть есть: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2009, 14:15 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=79&tid=1603212]: |
0ms |
get settings: |
13ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 173ms |

| 0 / 0 |
