Hello, All!
Где то проскакивала подобная задача раньше, но что-то не могу найти.
Есть несколько независимо работающих роботов, которые порциями
обрабатывают записи из очереди/таблицы.
Как кто прячет взятые на обработку записи от других роботов?
Пока пришел к не очень красивому решению, когда при получении порции
очереди записи просто лочатся апдейтом - но скорость решения будет не
велика, как я понимаю, из-за накладных расходов на when any do.
CREATE PROCEDURE QUERY_SEL(row_count integer) RETURNS (ID_row INTEGER)
AS
begin
for select first(:row_count) sq.id_row,
from query sq
where sq.id_send_state=1
into :id_row do
begin
update sgtquery sq set sq.id_send_state=2, sq.lock_time=current_timestamp
where sq.id_row=:id_row;
suspend;
when any do
begin
row_count = row_count +1;
end
end
end
да, еще вопрос - почему не срабатывает
row_count = row_count +1; - ведь фетчим вроде по одной записи?
Проверка с генератором показывает, что обращений после начала
выполнения запроса к row_count нет - что кажется странным.
--
-=Один хороший вопрос, может всю лекцию завалить.=-
With best regards, Nikolay Ponomarenko