powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранимая Процедура - процесс выполения.
23 сообщений из 23, страница 1 из 1
Хранимая Процедура - процесс выполения.
    #32067746
Anatem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос к сообществу.

1. Есть хранимая процедура, которая обрабатывает большое количество таблиц из которых собирает данные во временную таблицу и её возвращает.
2. Длинна цикла известна, но он в зависимости от требуемого объёма может идти достаточно долго. Долго значит минут 30-40.
3. Собственно вопрос: можло ли из хранимой процедуры делать некий callback или что ещё, что бы оповещать пользователя о ходе процесса, сколько ещё осталось выполнить шагов цикла. А то впадает в цикл и представления не имеешь когда это всё закончится.
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067774
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067775
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067777
Фотография Тимур
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry!!! :0)
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067784
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В АДО есть флажек - асинхронное выполнение. С другой стороны такие длинные запросы можеть в джоб поставить ?
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067794
Darth Vader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересный вопрос, не правда ли?
Стандартных (то есть, описанных в документации) способов нет. Могу предложить на выбор три способа:

1. Вызывайте raiserror в процессу обработки процы, с номером ошибки, по которому моно определить завершенность процесса. В приложении перехватывайте и обрабатывайте эти ошибки.
2. Напишите хр-процедуру и вызывайте ее из своей процедуры.
3. Напишите ActiveX и вызывайте его.
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067802
vap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используйте adAsyncFetch и FetchProgress

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
mRS.Open sqlCmd, , , , adAsyncFetch

Private Sub mRS_FetchProgress(ByVal Progress As Long, ByVal MaxProgress As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
  UpdateProgress
End Sub

Private Sub mRS_FetchComplete(ByVal pError As ADODB.error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
  CreateReport
End Sub
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067807
Darth Vader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 vap

FetchProgress показывает сколько записей выбрано в текущий набор. В вопросе к обществу сказано, что происходит длительное ФОРМИРОВАНИЕ временной таблицы, а не ВЫБОРКА из нее. Так, что в наборе очень долго не будет ни одной записи, а потом появятся сразу все.
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067830
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный вопрос, хотелось бы увидеть ответ :)) От себя могу добавить, что заметил, в версиях 6.5 и 7 при исполнении пакета или процедуры в QA промежуточные значения выводились, насколько я помню, а сейчас, в 2000, чтобы увидеть результаты даже print, приходится ждать окончания запроса...
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067831
Anatem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вариант с Fetch обречён :)

С raiseerror интересно, но что то у меня не получается ловить мессаги по ходу выполнения :(
Для коннекшина я задал:
ConnectOption = adConnectUnspecified
для команда
ExecuteOption = adAsyncExecute;
всё писано в Delphi 6

Почему то не срабатывает InfoMessage Event, вызывается только ExecuteComplete Event. Как правильно выставлять флаги для асинхронной выборки? Вызывается хранимая процедура...

ЗЫ
Придумал пока "пошлый" вариант:
1. Создаётся таблица с SPID, Position, Max.
2. Хранимая процедура делает INSERT или UPDATE в зависимости от наличия такого SPID в таблице, и походу выполнения пользователи в отдельном соединении перечитывает таблицу и выводит ПрогрессБар :)
3. Запрос выполняется не асинхронно, а в нитке, как завершается нитка прекращается опрос таблицы. :)
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067833
Anatem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2fima: В моём случае вывод в QA пашет, но блоками. Видать копит в буфер, а потом из него выдаёт, когда он накопится.
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067842
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2. Длинна цикла известна, но он в зависимости от требуемого объёма может идти достаточно долго.
Если работа идет в цикле, то что мешает завести табличку, в которую писать процент выполнения, а из клиента ее переодически опрашивать?
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067847
Anatem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только вот цикл идёт в while ВНУТРИ хранимой процедуры! И знать я незнаю чему равны значения переменных внутри неё :)
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067850
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И знать я незнаю чему равны значения переменных внутри неё :)

А модифицировать процедуру так чтобы в ней же и проверять значения переменных и в ней же писать эти значения в таблицу для клиента нельзя?
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067854
Anatem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Genady: Так пока процедура не выполнится никаких значений я не вижу, так как всё собирается во временную таблицу и целеком возвращается. Вопрос в том как в процессе выполнения процедуры данные о состоянии выдавать клиенту.
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067855
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Anatem

Блин ну что тут непонятного?
Насколько я понял у Вас в процедуре примерно такой код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Create procedure PPP
as
begin
       while
          begin
               /*Ваш T-SQL код*/ 
          end
end


Создайте на сервере таблицу с полем Percent, и в процедцре вставьте дополнительно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Alter procedure PPP
as
begin
       while
          begin
               /*Ваш T-SQL код*/ 
              insert into Percent (PercentValue) Values (@PercentValue)
          end
end


С клиента переодически опрашивайте эту таблицу и по значению PercentValue рисуйте градусник.
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067861
genie_vats
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще можно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
declare @i int

set @i= 1 

while @i< 10 
begin
	raiserror('Обрабатывается строка - %i', 16 , 1 ,@i) with nowait
	set @i=@i+ 1 
end
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067865
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в своем примере написал вставку значения процента, вероятно обновление будет лучше.
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067867
Anatem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Genady: У меня сейчас практически такой вариант и пашет :)
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067890
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня сейчас практически такой вариант и пашет :)

Ну дык, а в чем тогда проблема?
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067907
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 genie_vats
не знаток делфинов ... но по моему там с вашим примером не получится...
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067921
Anatem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Genady: Некрасиво :( Хочу что б было всё красиво и элегантно :)
...
Рейтинг: 0 / 0
Хранимая Процедура - процесс выполения.
    #32067947
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Anatem
Красиво, некарсиво это все субъективно, главное чтобы работало.
"Крылья... Ноги... ХВОСТ!" (с)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранимая Процедура - процесс выполения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]