Дорогие подписчики!
Дорогие подписчики! → Продолжаем рассказывать о встроенных пакетах Digital Q.DataBase, обеспечивающих совместимость с PL/SQL-окружением Oracle. Сегодня разберём ещё два пакета — DBMS_XMLDOM и DBMS_XMLGEN. DBMS_XMLDOM — работа с XML-документами через DOM-модель → Пакет DBMS_XMLDOM предоставляет интерфейс для работы с XML-документами на основе объектной модели DOM (Document Object Model). Он позволяет создавать, модифицировать и анализировать XML-структуры непосредственно в хранимых процедурах. Основные возможности: · Создание XML-документов с нуля с использованием DOM-узлов; · Парсинг существующих XML-документов в DOM-структуру; · Навигация по дереву документа с доступом к любому узлу; · Модификация содержимого, атрибутов и структуры документа; · Преобразование DOM-документа обратно в текстовое представление XML. Пример использования: ```sql DECLARE v_doc DBMS_XMLDOM.DOMDocument; v_root DBMS_XMLDOM.DOMNode; v_elem DBMS_XMLDOM.DOMNode; BEGIN -- Создание нового документа v_doc := DBMS_XMLDOM.newDOMDocument; v_root := DBMS_XMLDOM.makeNode(v_doc); -- Создание корневого элемента v_elem := DBMS_XMLDOM.createElement(v_doc, 'employees'); v_root := DBMS_XMLDOM.appendChild(v_root, v_elem); -- Вывод документа DBMS_OUTPUT.PUT_LINE(DBMS_XMLDOM.getXMLType(v_doc).getClobVal); END; ``` Области применения: · Формирование сложных XML-отчётов внутри базы данных; · Генерация XML-файлов для обмена с внешними системами; · Разбор входящих XML-сообщений без привлечения внешних парсеров; · Преобразование реляционных данных в иерархические XML-структуры. DBMS_XMLGEN — преобразование SQL-результатов в XML → Пакет DBMS_XMLGEN позволяет преобразовывать результаты SQL-запросов в XML-формат. В отличие от DBMS_XMLDOM, этот пакет ориентирован на автоматическую генерацию XML из реляционных данных с минимальным участием разработчика. Основные возможности: · Преобразование результатов SELECT в XML любого уровня вложенности; · Настройка форматирования: имя корневого элемента, кодировка, отступы; · Поддержка как прямой генерации в память, так и потокового вывода; · Возможность задавать правила отображения столбцов в XML-элементы. Пример использования: ```sql -- Простейшая генерация XML из результата запроса DECLARE v_ctx DBMS_XMLGEN.ctxHandle; v_xml XMLType; BEGIN v_ctx := DBMS_XMLGEN.newContext('SELECT id, name, salary FROM employees'); v_xml := DBMS_XMLGEN.getXML(v_ctx); DBMS_OUTPUT.PUT_LINE(v_xml.getClobVal); DBMS_XMLGEN.closeContext(v_ctx); END; ``` ```sql -- Генерация XML с настройкой формата DECLARE v_ctx DBMS_XMLGEN.ctxHandle; v_xml CLOB; BEGIN v_ctx := DBMS_XMLGEN.newContext('SELECT id, name FROM employees'); DBMS_XMLGEN.setRowSetTag(v_ctx, 'employees_list'); DBMS_XMLGEN.setRowTag(v_ctx, 'employee'); v_xml := DBMS_XMLGEN.getXML(v_ctx); DBMS_OUTPUT.PUT_LINE(v_xml); DBMS_XMLGEN.closeContext(v_ctx); END; ``` Области применения: · Экспорт табличных данных в XML для интеграции с внешними системами; · Создание XML-представлений для веб-сервисов; · Формирование XML-отчётов по шаблону «запрос — XML»; · Быстрое прототипирование XML-интерфейсов без написания сложного парсинга.