Операции файлового ввода/вывода выполняются модулем 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
Ошибка операционной системы во время операции записи