Дорогие подписчики!
Дорогие подписчики! → Продолжаем рассказывать о встроенных пакетах Digital Q.DataBase, обеспечивающих совместимость с PL/SQL-окружением Oracle. Сегодня разберём ещё два пакета из тех, что попали в последний выпуск (версия от 21 марта), — DBMS_ERRLOG и DBMS_HASH. DBMS_ERRLOG — логирование ошибок DML-операций → Пакет DBMS_ERRLOG позволяет сохранять информацию об ошибках, возникающих при выполнении массовых DML-операций (INSERT, UPDATE, MERGE, DELETE), без прерывания всего процесса. Это особенно полезно при загрузке больших объёмов данных, когда отдельные некорректные записи не должны останавливать обработку всего набора. Основные возможности: · Создание таблицы логирования ошибок для указанной таблицы; · Продолжение выполнения DML-операции при возникновении ошибок в отдельных строках; · Фиксация кода ошибки, номера строки и значений ошибочных колонок; · Настройка перечня колонок, подлежащих логированию. Пример использования: ```sql -- Создание таблицы логирования ошибок для таблицы employees EXEC DBMS_ERRLOG.CREATE_ERROR_LOG('employees', 'err_employees'); -- Выполнение массовой вставки с логированием ошибок INSERT INTO employees (id, name, salary) SELECT emp_id, emp_name, emp_salary FROM source_data LOG ERRORS INTO err_employees REJECT LIMIT UNLIMITED; ``` Области применения: · Загрузка данных из внешних источников с «грязными» данными; · Массовые обновления в условиях, когда часть строк не проходит валидацию; · Аудит и анализ причин отбраковки данных при ETL-процессах; · Обеспечение отказоустойчивости пакетной обработки. DBMS_HASH — хэширование данных → Пакет DBMS_HASH предоставляет функции для вычисления хэш-значений данных различных типов. Это позволяет создавать контрольные суммы, сравнивать большие объёмы данных, реализовывать механизмы кэширования и проверки целостности. Основные возможности: · Вычисление хэша для значений типов VARCHAR2, NUMBER, DATE, RAW, CLOB, BLOB; · Поддержка алгоритмов MD5 и SHA-1 (совместимость с Oracle); · Получение хэша от конкатенации нескольких значений; · Использование в выражениях SQL и PL/SQL. Пример использования: ```sql -- Вычисление хэша для строкового значения DECLARE v_hash RAW(16); BEGIN v_hash := DBMS_HASH.MD5('Hello, Digital Q.DataBase'); DBMS_OUTPUT.PUT_LINE(RAWTOHEX(v_hash)); END; ``` ```sql -- Использование в SQL-запросе для сравнения таблиц SELECT DBMS_HASH.MD5(column1 || column2 || column3) AS row_hash FROM my_table; ``` Области применения: · Сравнение содержимого двух таблиц без построчного обхода; · Проверка целостности данных при репликации; · Создание ключей кэширования на основе сложных составных данных; · Обнаружение дубликатов при отсутствии однозначного первичного ключа; · Контроль неизменности конфигурационных данных. → Хочу ещё раз напомнить: именно наличие большого количества аналогов DBMS-пакетов Oracle, позволяющих не изменять хранимую бизнес-логику при уходе с Oracle, делает Digital Q.DataBase наиболее рациональным вариантом для замены этой зарубежной СУБД.