Пакет как программная единица, объединяющая логически связанные типы PL/SQL, идентификаторы и подпрограммы, страница 5

Описание общедоступных подпрограмм пакета можно получить с помощью команды SQL*Plus DESCRIBE. Команда показывает описание подпрограмм только в том случае, если спецификация пакета скомпилирована без ошибок, тело пакета при этом может отсутствовать.

SQL> CREATE OR REPLACE PACKAGE comm_package

  2  IS

  3     g_comm NUMBER := 10;

  4     FUNCTION avg_comm (v_comm NUMBER) RETURN NUMBER;

  5     PROCEDURE max_comm (v_job VARCHAR2);

  6  END comm_package;

  7  /

Package created.

SQL> DESCRIBE comm_package

FUNCTION AVG_COMM RETURNS NUMBER

 Argument Name                  Type                    In/Out Default?

 ------------------------------ ----------------------- ------ --------

 V_COMM                         NUMBER                  IN

PROCEDURE MAX_COMM

 Argument Name                  Type                    In/Out Default?

 ------------------------------ ----------------------- ------ --------

 V_JOB                          VARCHAR2                IN

Поставляемые пакеты Oracle

Основные средства Oracle, например, встроенные функции, находятся в стандартном пакете Oracle, который имеет имя STANDART. Программные конструкции этого пакета автоматически доступны из любого блока PL/SQL любому пользователю базы данных. Если Вы обращаетесь к объектам стандартного пакета STANDART, имя пакета в качестве префикса указывать не обязательно.

Кроме пакета STANDART в поставку Oracle входит ряд пакетов, которыми могут пользоваться разработчики и администраторы базы данных. Эти пакеты отличаются префиксами имен: DBMS_ – пакеты для работы с базой данных, UTL_ – утилиты общего назначения. При обращении к объектам этих пакетов необходимо указывать имя пакета в качестве префикса к имени объекта.

Пакет

Описание

DBMS_JOB

Запуск пользовательских заданий в определенное время

DBMS_LOCK

Управление блокировками базы данных

DBMS_OUTPUT

Вывод строк текста в буфер для дальнейшего получения и вывода

DBMS_PIPE

Получение и пересылка сообщений между сессиями при помощи каналов

DBMS_TRANSACTION

Управление транзакциями SQL

DBMS_LOB

Работа с большими объектами

UTL_FILE

ASCII операции чтения/записи системных файлов

DBMS_OUTPUT

Пакет DBMS_OUTPUT позволяет отображать информацию, выводимую из блоков PL/SQL, для их отладки и тестирования.

Процедуры и функции пакета формируют выходной буфер:

·  Каждая строка буфера хранится в закрытой таблице PL/SQL

·  Каждая строка буфера завершается символом новой строки

·  Каждая строка буфера не должна превышать 255 байт, включая символ новой строки

·  Размер буфера должен быть в диапазоне от 2000 до 1000000 байт

Процедуры и функции

Описание

PUT

Добавляет текст к текущей строке буфера

NEW_LINE

Добавляет символ конца строки в буфер. Несколько вызовов подряд не формирует пустые строки

PUT_LINE

Добавляет строку в буфер

GET_LINE

Получает текущую строку буфера

GET_LINES

Получает массив строк буфера

ENABLE/DISABLE

Включает/выключает вызов подпрограмм пакета. В процедуре ENABLE можно задать размер буфера

SQL> BEGIN

  2     DBMS_OUTPUT.enable;

  3     DBMS_OUTPUT.put('It ');

  4     DBMS_OUTPUT.put('is ');

  5     DBMS_OUTPUT.put('my string');

  6     DBMS_OUTPUT.new_line;

  7  END;

  8  /

It is my string

PL/SQL procedure successfully completed.

DBMS_PIPE

Пакет DBMS_PIPE позволяет отправлять сообщения из одного сеанса в другой через именованные каналы.

Процедуры и функции

Описание

PACK_MESSAGE

Упаковывает сообщение в локальный буфер сообщений (сообщение может иметь тип данных VACHAR2, NUMBER, DATE)

PACK_MESSAGE_ROWID

Упаковывает сообщение, тип данных которого ROWID, в локальный буфер сообщений

SEND_MESSAGE

Отправляет сообщение, содержащееся в локальном буфере в именованный канал

RECEIVE_MESSAGE

Получает сообщение из именованного канала и кладет его в локальный буфер сообщений

UNPACK_MESSAGE

Распаковывает сообщение из локального буфера сообщений (сообщение может иметь тип данных VACHAR2, NUMBER, DATE)

UNPACK_MESSAGE_ROWID

Распаковывает сообщение, тип данных которого ROWID, из локального буфера сообщений

SQL> DECLARE

  2     l_var NUMBER;

  3  BEGIN

  4     DBMS_PIPE.pack_message('It is my message');

  5     l_var := DBMS_PIPE.send_message('p1');

  6  END;

  7  /

PL/SQL procedure successfully completed.

SQL> DECLARE

  2     l_var NUMBER;

  3     l_msg VARCHAR2(50);

  4  BEGIN

  5     l_var := DBMS_PIPE.receive_message('p1');

  6     DBMS_PIPE.unpack_message(l_msg);

  7     DBMS_OUTPUT.put_line(l_msg);

  8  END;

  9  /

It is my message

PL/SQL procedure successfully completed.

UTL_FILE

Пакет UTL_FILE позволяет читать из текстовых файлов операционной системы и писать в них.

Процедуры и функции

Описание

FOPEN

Функция открывает файл операционной системы и возвращает указатель на файл (тип данных – RECORD) для последующих операций

PUT

Процедура добавляет текст к текущей строке в открытом файле

NEW_LINE

Процедура добавляет символ конца строки к текущей строке в открытом файле

PUT_LINE

Процедура записывает текстовую строку с символом конца строки в открытый файл

GET_LINE

Процедура читает текстовую строку из открытого файла операционной системы

FCLOSE

Процедура закрывает файл операционной системы