Я сталкивался с этой проблемой в течение двух дней и обнаружил, что каталог, который вы создаете в Oracle, также необходимо сначала создать на вашем физическом диске. Я нигде не упоминал об этом, я пытался найти решение этой проблемы.
т.е.
Если вы создали каталог, скажем, 'DB_DIR'.
CREATE OR REPLACE DIRECTORY DB_DIR AS 'E:\DB_WORKS';
Затем вам нужно убедиться, что DB_WORKS существует на вашем диске E: \, а также права доступа на чтение / запись на уровне файловой системы доступны процессу Oracle.
Мое понимание UTL_FILE из моего опыта приведено ниже для такого рода операций.
UTL_FILE - объект под пользователем SYS. GRANT EXECUTE ON SYS.UTL_FILE TO
PUBLIC; необходимо дать, когда вы вошли в систему как SYS. В противном случае это будет
дать объявление ошибки в процедуре. Любой может создать каталог как
показано: - СОЗДАТЬ ИЛИ ЗАМЕНИТЬ КАТАЛОГ DB_DIR AS 'E: \ DBWORKS'; Но СОЗДАТЬ
СПРАВОЧНИК разрешение должно быть на месте. Это может быть предоставлено как
показано: - GRANT CREATE ALL DIRECTORY пользователю; пока залогинен как SYS
пользователь. Однако, если это необходимо использовать другому пользователю, необходимо предоставить
быть переданным этому пользователю, иначе он выдаст ошибку. GRANT READ,
НАПИСАТЬ, ВЫПОЛНИТЬ НА DB_DIR ДЛЯ пользователя; пока залогинен как пользователь который
создал каталог. Затем скомпилируйте ваш пакет. Перед выполнением
процедуры, убедитесь, что каталог существует физически на вашем
Диск. В противном случае он выдаст ошибку «Недопустимая операция с файлом». (В.
ВАЖНО) Убедитесь, что права на чтение и запись на уровне файловой системы находятся в
место для процесса Oracle. Это отдельно от уровня БД
предоставленные разрешения. (V. ВАЖНО) Выполните процедуру. Файл должен получить
заполнен набором результатов вашего запроса.