Недавно я оформил и выложил на GitHub "труд долгих лет" atop-plsql - набор PL/SQL пакетов и сопутствующих им типов, таблиц и некоторых других объектов схемы БД.
Эти пакеты развивались и использовались в течение нескольких лет для разработки на их основе конечных решений в СУБД Oracle 11gR2.
Библиотека atop-plsql предлагает разработчику следующие средства и возможности:
-
Спецификация пакета
at_env(тела у этого пакета нет) с константами - параметрами конфигурации, используемыми другими пакетами из коллекции atop-plsql. Разработчик, использующий atop-plsql, настраивает эти параметры под себя. -
Несколько типов, используемых пакетами atop-plsql и доступных разработчику, включая (вложенные) table of varchar2(4000), table of number, table of date и ассоциативные массивы в пакете
at_type, а также функции для конвертации между вложенными таблицами и ассоциативными массивами. -
Несколько исключений, используемых пакетами atop-plsql и доступных разработчику, включая
assertion_error,invalid_argumentи другие, определенные в пакетеat_exc, а также процедуры, проверяющие некоторое условие и возбуждающие исключение при его невыполнении. -
Полезные функции для разбиения строки varchar2 с разделителями на элементы, помещаемые во вложенную таблицу или ассоциативный массив; для соединения элементов в строку varchar2; для zip-сжатия данных из внешнего файла (доступного через объект-директорию Oracle), ассоциативного массива или blob; см. пакет
at_util. -
Файловые утилиты в пакете
at_fileдля создания, записи в, чтения из и переименования внешних файлов, использующие кодировку по умолчанию, а также объекты-директории по умолчанию, заданные в спецификации пакетаat_env. -
Pipeline-функции, читающие
.csvфайл (внешний, blob или clob) и возвращающие его строки как строки таблицы; см. функцииcsv_tableв пакетеat_file.На тему работы с внешними
.csvфайлами как с таблицами см. мою статью Загрузка данных в БД Oracle из csv-файла. -
Процедуры для загрузки
.csvфайла (внешнего, blob или clob) в таблицу базы данных, строки которой представляют строки файла, а столбцы содержат индивидуальные значения; см. процедурыload_csvв пакетеat_file. -
Процедуры, получающие на вход открытый динамический курсор (
sys_refcursor), извлекающие с его помощью данные, форматирующие их как csv, html-таблицу или json, и выводящие их вdbms_outputбуфер, OWA буфер, ассоциативный массив или внешний файл; см. пакетat_out. -
Утилиты для создания, управления и удаления журнальных таблиц для регистрации изменений в указанной таблице БД вместе с метаинформацией о пользовательской сессии, внесшей изменения; см. пакет
at_jour. Префикс или суффикс для имени журнальных таблиц, префикс имен столбцов с метаинформацией, а также имя схемы для журнальных таблиц задаются в спецификации пакетаat_env. -
Процедуры в пакете
at_logдля логирования информационных сообщений, предупреждений, ошибок и отладочных сообщений в таблицу базы данныхat_log_; со временем старые сообщения автоматически удаляются из таблицы. -
Утилиты в пакете
at_ldapдля выполнения запросов и извлечения данных из LDAP сервера. Извлеченные данные возвращаются как ассоциативный массив или как таблица - с помощью pipeline-функции. Функцияuser_mailзапрашивает у LDAP сервера и возвращает email адрес по имени пользователя. Адрес LDAP сервера, номер порта, а также имя и пароль пользователя указываются в спецификации пакетаat_env.На тему работы с LDAP сервером из PL/SQL см. мои статьи Как работать с LDAP в PL/SQL.
-
Хранилище для параметров конфигурации, устанавливаемых и извлекаемых владельцами (owners) с помощью пакета
at_conf. Значения параметров, в зависимости от природы параметров, возвращаются "как есть" или предварительно динамически оцениваются с помощьюexecute immediate. -
Утилиты в пакете
at_taskдля запуска блоков кода PL/SQL по расписанию, причем расписание (в духе crontab) задается регулярным выражением. Задачи выполняются по расписанию посредством заданий (jobs)dbms_scheduler.На эту тему см. мою статью Запуск задач в БД Oracle по расписанию, заданному регулярным выражением.
-
Процедуры в пакете
at_smtpдля подготовки и отправки сообщений, текстовых или html-размеченных, по электронной почте, в том числе, сообщений с несколькими файловыми вложениями. Адрес SMTP сервера, номер порта, а также имя и пароль пользователя указываются в спецификации пакетаat_env. -
Процедуры в пакете
at_mailдля отправки по электронной почте сообщений, используя приветствие, подпись и отправителя по умолчанию, заданные в спецификации пакетаat_env. -
Процедуры в пакете
at_mailдля отправки данных, полученных с помощью динамического курсора (sys_refcursor), по электронной почте в виде вложенного.csvфайла (опционально сжатого zip) или в виде html-таблицы в теле сообщения; получатели, тема, текст сообщения и его приоритет также передаются через параметры. -
Пакет
at_deltaдля создания журналов регистрации изменений в указанных таблицах и создания сервисов, предоставляющих клиентам эти изменения (дельты); это инфраструктура для создания интерфейсов с внешними системами, а также внутренних решений по анализу и обработке изменения данных за период времени.На эту тему см. мою статью Захват и обработка изменений в БД Oracle (at_delta).
Для того, чтобы установить atop-plsql, пользователю Oracle, помимо стандартных ролей connect и resource, нужно выдать следующие привилегии:
grant create table to <user>;
grant create view to <user>;
grant create trigger to <user>;
grant create job to <user>;
grant execute on utl_file to <user>;
grant execute on utl_tcp to <user>;
grant execute on utl_smtp to <user>;
grant select on sys.v_$database to <user>;
grant select on sys.v_$session to <user>;
Для того, чтобы работать с LDAP сервером с помощью PL/SQL и, в частности, с помощью пакета at_ldap, нужно создать ACL, разрешающий доступ пользователя Oracle, владельца пакета, к серверу LDAP:
begin
dbms_network_acl_admin.create_acl (
acl => 'ldap.xml',
description => 'ACL to grant access to LDAP server',
principal => '<user>',
is_grant => true,
privilege => 'connect'
);
end;
/
begin
dbms_network_acl_admin.assign_acl (
acl => 'ldap.xml',
host => '<ldsp server ip-address>',
lower_port => <ldap server port>,
upper_port => <ldap server port>
);
end;
/
Аналогично, для того, чтобы пользователь Oracle мог отправлять почту с помощью PL/SQL и, в частности, с помощью пакетов at_smtp и at_mail, нужно создать ACL, разрешающий доступ пользователя к серверу SMTP:
begin
dbms_network_acl_admin.create_acl (
acl => 'mailer.xml',
description => 'ACL to grant access to smtp server',
principal => '<user>',
is_grant => true,
privilege => 'connect'
);
end;
/
begin
dbms_network_acl_admin.assign_acl (
acl => 'mailer.xml',
host => '<smtp server ip-address>',
lower_port => <smtp server port>,
upper_port => <smtp server port>
);
end;
/
В папке demo репозитория на GitHub имеется пакет at_rep, использующий средства atop-plsql для формирования и отправки по электронной почте трех отчетов. Пакет одновременно демонстрирует возможности atop-plsql и предоставляет практически полезные отчеты.
Комментариев нет:
Отправить комментарий