PL/SQL, в силу его простоты, большого программного задела и эффективностью
доступа к данным в БД, продолжает оставаться активным
языком разработки прикладного ПО в Oracle.
Поэтому естественно и нередко возникает желание использовать его не только
для обработки
данных, но и для связи с внешним, по отношению к Oracle, миром. В принципе
такие возможности в PL/SQL достаточно широки благодаря праву обратиться из
программ на этом языке ко внешним процедурам на C, к программам на Java и некоторым
системным пакетам типа DBMS_PIPE. Однако в общем случае это будут довольно
громоздкие решения, которые требуют от разработчика определенной квалификации.
В то же время для некоторых частных задач в PL/SQL могут существовать и более
простые методы. Здесь будет рассмотрен один такой пример: способ выдачи данных
из программы на PL/SQL в файл формата MS Word.
Возможность выдавать данные в формате Word реализована через механизм обращения
к COM Automation. Как и следовало ожидать, использовать ее можно только в СУБД
Oracle, работающей на платформе Windows.
Для того, чтобы она была осуществима, требуется выполнить некоторые подготовительные
действия:
- установить компоненты COM Automation при установке программной среды
СУБД
- подготовить конфигурацию Oracle Net
- прогнать в конкретной схеме общий сценарий для возможности взаимодействия
с COM Automation
- прогнать в этой же схеме специальный сценарий для возможности экспорта
данных в MS Word
Когда вы выполните с помощью Oracle Universal Installer шаг 1, в %ORACLE_HOME%
появится каталог com с примерами и объяснениями на английском языке. Там же,
в каталоге %ORACLE_HOME%\com\demo лежат примеры и для выдачи из PL/SQL в MS
Excel, MAPI и PowerPoint. Эти примеры устроены аналогично более востребованному
примеру для MS Word, рассматриваемому в этой статье.
Взаимодействие с COM Automation реализуется в Oracle через внешние программы,
а общение с ними из PL/SQL выполняется средствами сетевой поддержки. Поэтому
чтобы все работало, нужно изменить конфигурационные файлы Oracle Net: listener.ora
на сервере и tnsnames.ora на клиенте. В последних версиях Oracle этим специально
можно не заниматься, так как обычно они содержат нужные настройки автоматически,
после установки ПО Oracle на компьютер.
Тем не менее, нелишне проверить следующее.
В файле listener.ora должен быть примерно следующий фрагмент:
В файле tnsnames.ora должен быть следующий фрагмент:
Если у вас на компьютере каталог ORACLE_HOME или название LISTENER процесса-“привратника”
другие, нужно проставить то, что есть.
Шаги 3 и 4 рассматриваются ниже.
Пусть из программы, работающей от имени пользователя SCOTT, требуется выдать
данные в формате MS Word. Для этого пользователь SCOTT должен обладать определенными
правами и быть владельцем определенных объектов.
Войдем в SQL*Plus как SYS и выдадим привилегию:
Привилегия CREATE LIBRARY относительно редкая и используется в связи с т.
н. “библиотекой”, обеспечивающей общение с внешними программами на C, но здесь
к ее выдаче можно отнестись чисто прагматически, не вдаваясь в детали.
Следующим шагом войдем в схему SCOTT и подготовим в схеме инфраструктуру для
COM Automation:
Проследите по таблице USER_OBJECTS появившиеся новые объекты. Они позволят
организовать работу и с другими COM-объектами: Excel, PowerPoint и MAPI.
Выполним конкретно для MS Word:
Снова проверьте изменения в схеме по таблице USER_OBJECTS.
Выполним в SQL*Plus:
В каталоге c:\ должен появиться файл worddemo со списком сотрудников в формате
MS Word.