Процедура GET_LINE используется не для записи в файл, а для чтения из файла. Одна строка текста считывается в указанном файле и возвращается параметром BUFFER. Символ новой строки в возвращаемую последовательность не включается. Описание процедуры GET_LINE выглядит следующим образом:
procedure GET_LINE (file_handle in FILE TYPE, buffer out varchar2);
Когда из файла считывается последняя строка, устанавливается исключительная ситуация NO_DАТА_FOUND. Если строка не помещается в буфер, размер которого указан как фактический параметр, устанавливается VALUE_ERROR. При чтении пустой строки возвращается пустая последовательность символов (NULL). В случае ошибки записи устанавливается UTL_FILE.READ_ERROR. Максимальный размер входной строки составляет 1022 байта (если параметром MАХLINESIZE функции FOPEN не задан другой размер). Параметры процедуры GET_LINE описаны в следующей таблице.
Таблица 11 Параметры функции GET_LINE
Параметр
Тип
Описание
file_handle
UTL_FILE.FILE_TYPE
Описатель файла, возвращаемый функцией FOPEN. Если описатель некорректен, то устанавливается
UTL_FILE.INVALID_FILEHANDLE.
Продолжение таблицы 11
buffer
varchar2
Буфер, в который записывается строка. Если файл не был открыт на чтение (‘r’) то устанавливается UTL_FILE.INVALID_OPERATION.
При написании приложений, использующих процедуры и функции модуля UTL_FILE рекомендуется всегда включать обработчики реальных ошибок, которые могут произойти при вызове определенных процедур или функций.
В дополнение к средствам чтения таблиц базы данных и записи в эти таблицы в PL/SQL предлагаются два встроенных модуля, предназначенных для взаимодействия между соединениями, или сеансами (sessions). Это модули DBMS_PIPE и DBMS_ALERT. Их можно использовать для обмена сообщениями между сеансами, соединенными с одним и тем же экземпляром базы данных. Эти модули чрезвычайно удобны и выполняют множество полезных функций. В данном разделе детально рассмотрен только модуль DBMS_PIPE, предназначенный для реализации программных каналов базы данных. Модуль DBMS_ALERT, реализующий систему оповещения базы данных подробно описан в [3].
Посредством модуля DBMS_PIPE реализуются программные каналы баз данных (database pipe). Канал базы данных не зависит от операционной системы, и будет работать в любой среде, в которой функционирует ORACLE. Различные сеансы, соединенные с одним и тем же экземпляром ORACLE, могут посылать и получать сообщения по такому каналу. Канал могут использовать несколько сеансов, получающих сообщения, или получателей (readers), и несколько сеансов, посылающих сообщения, или отправителей (writers). При этом сеанс может посылать и получать несколько сообщений. Все эти сеансы могут находиться на разных машинах и работать в различных средах выполнения программ PL/SQL. Все, что требуется от сеансов, – соединиться с одним и тем же экземпляром ORACLE, а также иметь возможность выполнять блоки РL/SQL.
Программные каналы асинхронны – они функционируют независимо от транзакций. После того как сообщение послано по каналу, вернуть его невозможно, даже если был выполнен откат той транзакции, которая выдала сообщение. Следовательно, их можно использовать для реализации автономных транзакций, которые можно завершать или откатывать независимо от родительской транзакции.
В прикладном программном интерфейсе DBMS_PIPE и для посылки, и для получения сообщений применяется локальный буфер сообщений. Отправитель упаковывает в буфере группу элементов данных, а затем его содержимое посылается по каналу в буфер сообщений принимающего сеанса. Принимающий сеанс распаковывает буфер и получает в результате реальную информацию. Подробнее процессы посылки и получения сообщений по программному каналу описываются в следующих параграфах.