Выполнять связанные или одинаковые процедуры в базе данных Oracle одновременно, чтобы не мешать друг другу - PullRequest
0 голосов
/ 08 мая 2018

У меня есть программное обеспечение для создания специальных отчетов, которые запускают процедуры в базе данных Oracle, но проблема в следующем: когда мы создаем отчет, он использует некоторые процедуры, усекает и заполняет некоторые таблицы, если мы одновременно создаем другой отчет, это вызвало ошибку, потому что ему нужны данные моей таблицы, которые усекаются с помощью другой процедуры. Поэтому я ищу метод или запрос для решения этой проблемы и создания второго отчета сразу после первого отчета, завершающего все процедуры, которые он использует, в состоянии, когда пользователь ничего не замечает. В этом случае время создания второго отчета больше, чем у первого отчета, с которым все в порядке.

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете использовать пакет DBMS_LOCK.ALLOCATE_UNIQUE для синхронизации ваших приложений и обеспечения последовательной обработки.

DECLARE
    l_status number;
    l_lock_handle varchar2(128);
    l_lock_request integer;
BEGIN
    DBMS_LOCK.ALLOCATE_UNIQUE ( lockname =>  'NAME_OF_YOUR_LOCK', lockhandle => l_lock_handle);
    l_status := DBMS_LOCK.REQUEST(lockhandle => l_lock_handle, timeout => 15);
    if (l_status = 0) then
      -- Plase your code here
      -- Only one thread can work here
      l_lock_request  := DBMS_LOCK.release(l_lock_handle);
    else
      -- handle other lock statuses...
    end if;
END;

Подробнее о DBMS_LOCK вы можете прочитать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...