Дорогие подписчики!
Дорогие подписчики! → Продолжаем рассказывать о встроенных пакетах Digital Q.DataBase, обеспечивающих совместимость с PL/SQL-окружением Oracle. Сегодня разберём ещё два пакета из тех, что попали в последний выпуск (версия от 21 марта), — DBMS_LOCK и DBMS_ODCI. DBMS_LOCK — пользовательские блокировки → Пакет DBMS_LOCK предоставляет механизм создания блокировок, управляемых непосредственно прикладным кодом. Это позволяет синхронизировать выполнение нескольких сеансов при работе с общими ресурсами, не затрагивая стандартные механизмы блокировок строк и таблиц. Основные возможности: · Запрос и освобождение блокировки с указанием имени и режима; · Преобразование режима уже полученной блокировки; · Проверка идентификатора блокировки по имени; · Ожидание освобождения блокировки с настройкой таймаута. Пример использования: ```sql -- Объявление идентификатора блокировки DECLARE v_lockhandle VARCHAR2(128); BEGIN -- Запрос блокировки с именем 'MY_APP_LOCK' DBMS_LOCK.ALLOCATE_UNIQUE('MY_APP_LOCK', v_lockhandle); -- Захват блокировки в монопольном режиме DBMS_LOCK.REQUEST(v_lockhandle, DBMS_LOCK.X_MODE, 10); -- Критическая секция: работа с общим ресурсом -- Освобождение блокировки DBMS_LOCK.RELEASE(v_lockhandle); END; ``` Области применения: · Ограничение одновременного выполнения одной и той же процедуры; · Синхронизация доступа к внешним системам (файловая система, API); · Реализация очередей и пулов ресурсов на уровне приложения; · Защита критических участков кода при параллельных вызовах. DBMS_ODCI — управление контекстом транзакций → Пакет DBMS_ODCI предоставляет функции для работы с контекстом выполнения и управления состоянием транзакций в пользовательских типах данных и методах. Этот пакет используется преимущественно при реализации пользовательских индексов и операторов расширения данных. Основные возможности: · Получение информации о текущем состоянии транзакции; · Управление контекстом выполнения для методов пользовательских типов; · Поддержка кастомных реализаций индексов (ODCI — Oracle Data Cartridge Interface); · Обеспечение корректной фиксации и отката в расширенных сценариях. Пример использования: ```sql -- Проверка состояния транзакции в методе пользовательского типа CREATE OR REPLACE TYPE BODY my_custom_type AS MEMBER FUNCTION check_state RETURN NUMBER AS BEGIN -- Проверка, активна ли текущая транзакция IF DBMS_ODCI.IS_TRANSACTION_ACTIVE = 1 THEN RETURN 1; ELSE RETURN 0; END IF; END; END; ``` Области применения: · Разработка пользовательских типов данных со сложной транзакционной логикой; · Создание нестандартных методов доступа к данным; · Реализация расширений для полнотекстового поиска и пространственных данных; · Интеграция с внешними движками обработки данных. Хочу ещё раз напомнить - именно наличие большого количества аналогов DBMS_-пакетов Oracle позволяющих не изменять хранимую бизнес-логику при уходе с Oracle, делает Digital Q.DataBase наиболее рациональным вариантом для замены этой зарубежной СУБД.