Files
Bridge-and-Join-s/deploy/depo/fancy-m2m/FTV_M2M_JOB.sql
T

72 lines
2.2 KiB
Transact-SQL

CREATE OR ALTER procedure [dbo].[FTV_M2M_JOB]
as
set nocount on;
declare
@ID int,
@STATE varchar(64);
declare
@ERROR_NUMBER int,
@COMMENT varchar(MAX);
--Новые поручения
declare cur cursor local fast_forward read_only for select ID from FTV_M2M M where M.STATE = 'TODO' order by M.TimeNew;
open cur;
while 0 = 0 begin fetch next from cur into @ID;
if @@FETCH_STATUS <> 0 break;
--Тут можно отправить уведомление, создать входящее сообщение и т.д.
update FTV_M2M set TimeBeg = GETDATE() where ID = @ID;
--Главный процесс
begin try
exec FTV_M2M_PROCESS_CREATE @ID;
set @STATE = 'SUCCESS';
end try
begin catch
set @ERROR_NUMBER = ERROR_NUMBER();
set @COMMENT = ERROR_MESSAGE() + ' // ' + ERROR_PROCEDURE() + ' // ' + trim(str(ERROR_LINE()));
set @STATE = 'ERROR'
end catch
--Тут можно уведомить об ошибочном статусе
update FTV_M2M set STATE = @STATE, TimeEnd = GETDATE(), COMMENT = @COMMENT where ID = @ID;
end;
close cur;
deallocate cur;
--Новые события
declare cur cursor local fast_forward read_only for select ID from FTV_M2M_EVENTS ME where ME.STATE = 'TODO' order by ME.TimeNew;
open cur;
while 0 = 0 begin fetch next from cur into @ID;
if @@FETCH_STATUS <> 0 break;
--Тут можно отправить уведомление, создать входящее сообщение и т.д.
update FTV_M2M_EVENTS set TimeBeg = GETDATE() where ID = @ID;
--Процесс изменения событий
begin try
exec FTV_M2M_PROCESS_EVENTS @ID;
set @STATE = 'SUCCESS';
end try
begin catch
set @ERROR_NUMBER = ERROR_NUMBER();
set @COMMENT = ERROR_MESSAGE() + ' // ' + ERROR_PROCEDURE() + ' // ' + trim(str(ERROR_LINE()));
set @STATE = 'ERROR'
end catch
--Тут можно уведомить об ошибочном статусе
update FTV_M2M_EVENTS set STATE = @STATE, TimeEnd = GETDATE(), COMMENT = @COMMENT where ID = @ID;
end;
close cur;
deallocate cur;
/* тестовый блок удалён при переносе в репозиторий */