В клиентском PL/SQL имеется модуль, подобный UTL_FILE, так называемый ТЕХТ_IO. Однако в отношении безопасности информации эти модули различны. Файлы, создаваемые с помощью клиентского модуля ТЕХТ IO, можно размещать в любом месте на станции клиента при наличии необходимых привилегий для работы с операционной системой. При выполнении клиентских операций файлового ввода/вывода каких-либо привилегий для работы с PL/SQL и собственно базой данных не требуется.
На сервере необходимо поддерживать безопасность информации на более высоком уровне. Для этого выделяются специальные каталоги, в которые модуль UTL_FILE может записывать данные. Такие каталоги называются доступными (accessible directories). Они определяются параметром UTL_FILE_DIR инициализационного файла базы данных. Каждый доступный каталог указывается в этом файле отдельной строкой:
UTL FILE DIR = имя_каталога
Вид спецификации имя каталога зависит от применяемой операционной системы.
Для того чтобы обратиться к файлу с помощью модуля UTL_FILE, нужно передать функции FOPEN имя каталога и имя файла в виде отдельных параметров. Имя каталога сопоставляется со списком доступных каталогов, и если оно там найдено, операция разрешается (при соблюдении ограничений безопасности операционной системы). Если в FOPEN указано имя недоступного каталога, выдается сообщение об ошибке. Подкаталоги доступных каталогов можно использовать только тогда, когда они также указаны как доступные явным образом.
Операции файлового ввода/вывода выполняются модулем UTL_FILE в режиме пользователя ORACLE (пользователь ORACLE – это владелец файлов, обеспечивающих функционирование базы данных, и процессов, составляющих экземпляр базы данных). Следовательно, пользователь ORACLE должен иметь привилегии операционной системы на чтение из всех доступных каталогов и на запись в них. Если пользователю ORACLE не предоставлены соответствующие привилегии на доступные каталоги, то выполнение всех операций над ними запрещается операционной системой.
Все файлы, создаваемые в результате работы модуля UTL_FILE, будут принадлежать пользователю ORACLE. Кроме того, файлы будут создаваться с привилегиями, установленными операционной системой для пользователя ORACLE по умолчанию. Если с этими файлами должны работать другие пользователи, обращаясь к ним не из модуля UTL_FILE, системный администратор обязан изменить полномочия на эти файлы.
ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ,УСТАНАВЛИВАЕМЫЕ В UTL_FILE
Если при выполнении некоторой процедуры или функции модуля UTL_FILE возникает ошибка, устанавливается исключительная ситуация. Возможные исключительные ситуации приведены в таблице 7. Обратите внимание на то, что в их состав входят восемь определенных в модуле UTL_FILE и две стандартные исключительные ситуации (NO_DАТА_FOUND и VALUE_ERROR). Исключительные ситуации UTL_FILЕ можно распознать по имени или с помощью обработчика исключительной ситуации OTHERS. Стандартные исключительные ситуации определяются еще и по значениям, возвращаемым для них функцией SQLCODE.
Таблица 7 Исключительные ситуации, устанавливаемые в UTL_FILE
Файл нельзя открыть так, как это было запрошено. Возможная причина – полномочия операционной системы. Устанавливается также при попытке записи в файл, открытого для чтения, или при попытке чтения файла, открытого для записи
GET_LINE, PUT, PUT_LINE, NEW_LINE, PUTF, FFLUSH
INVALID_MAXLINESIZE
Указанный максимальный размер строки слишком велик или слишком мал.
FOPEN
READ_ERROR
Ошибка операционной системы во время операции чтения
GET_LINE
WRITE ERROR
Ошибка операционной системы во время операции записи