Можете ли вы помочь мне в Oracle для записи содержимого таблицы в файл с использованием функций UTL
При написании процедуры SQL для создания файла CSV из содержимого таблицы я застрял в ошибке ниже:
ERROR at line 1:
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 488
ORA-29283: invalid file operation
ORA-06512: at "DSI_DPIPE.BUSSHOURS", line 28
ORA-06512: at "DSI_DPIPE.BUSSHOURS", line 55
ORA-06512: at line 1
Первая строка:
file_http UTL_FILE.file_type;
Та же ошибка приходит, даже если я использую утверждение:
file_http sys.UTL_FILE.file_type;
Спасибо за ваше ценное решение заранее.
3 ответа
Используйте функцию CREATE DIRECTORY вместо UTL_FILE_DIR для проверки доступа к каталогу.
UTL_FILE_DIR = * опасен, поскольку позволяет пользователям базы данных, имеющим доступ к пакету utl_file, читать / записывать файлы на сервере базы данных с разрешениями пользователя oracle (файлы данных, init.ora, listener.ora и т. Д.).
У вас есть права на запись / чтение в каталог. Пользователю oracle на сервере необходимо разрешение на чтение / запись.
Имеет ли пользователь oracle права доступа для записи в каталог, в который вы хотите поместить файл?
РЕДАКТИРОВАТЬ: Если вы находитесь в среде Unix, вы должны вручную войти в систему как пользователь оракула, перейдите по пути, по которому вы пытаетесь создать файл, и используйте команду "touch" для создания файла. Если вы не можете создать файл таким способом, вы знаете, что проблема связана с "правами доступа" в операционной системе, иначе проблема в ORACLE. (уменьшит поиск в 50%;D)
РЕДАКТИРОВАТЬ 2:
Если UTL_FILE_DIR = *, то разрешения базы данных отключены, и все файлы и каталоги доступны для всех пользователей. Но я думаю, что это применимо только на уровне базы данных, поэтому операционной системе также есть, что сказать. Если у пользователя-оракула нет прав на запись в какой-либо каталог, то пользователи базы данных не могут получить это право независимо от того, что говорит UTL_FILE_DIR.
Убедитесь, что путь к каталогу указан правильно, и у вас установлены правильные разрешения (т. Е. Oracle разрешает операционной системе выполнять запись в эту папку).