ORA-29283: недопустимая файловая операция ORA-06512: в «SYS.UTL_FILE», строка 536 - PullRequest
6 голосов
/ 16 мая 2011

Ниже приведен код, который я использую для извлечения данных из таблицы в плоский файл.

BEGIN
    DECLARE
        file_name VARCHAR2(50);
        file_handle utl_file.file_type;
BEGIN
    file_name := 'table.txt';
    file_handle := utl_file.fopen('SEND',file_name,'W');
FOR rec in(
    SELECT            column 1
                ||'~'||column 2
                ||'~'||column 3 out_line
    FROM table1)LOOP
UTL_FILE.PUT_LINE(file_handle,rec.out_line);
UTL_FILE.FFLUSH(file_handle);
END LOOP;
UTL_FILE.FCLOSE(file_handle);
END;
end;

Этот код работает нормально в нашей базе данных разработки, но выдает следующую ошибку, если я выполняю в новой БД.Чтобы решить эту проблему.

Ребята, пожалуйста, дайте мне знать, если вам требуются дополнительные данные для решения этого вопроса.

Ответы [ 4 ]

5 голосов
/ 16 мая 2011

Итак, @Vivek получил решение проблемы с помощью диалога в комментариях, а не путем реального ответа. Кто сказал, что сайт вопросов и ответов не форум? Э, я, среди других.

Во всяком случае, в случае отсутствия приемлемого ответа на этот вопрос, я предлагаю ссылку на мой ответ на тему UTL_FILE.FOPEN(). Найдите здесь .

P.S. Я отмечаю этот ответ вики-сообществом, потому что это не правильный ответ на этот вопрос, просто перенаправление в другое место.

0 голосов
/ 15 сентября 2018

В Windows также проверьте, не зашифрован ли файл с использованием EFS.У меня была такая же проблема, пока я не расшифровал файл вручную.

0 голосов
/ 15 августа 2018

Я сталкивался с этой проблемой в течение двух дней и обнаружил, что каталог, который вы создаете в 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. ВАЖНО) Выполните процедуру. Файл должен получить заполнен набором результатов вашего запроса.

0 голосов
/ 08 апреля 2014

предполагается, что файл уже создан в предопределенном каталоге с именем "table.txt" 1. изменить владельца файла sudo chown {ваше имя пользователя}: {ваше имя пользователя} table.txt 2-й изменить режим файла sudo chmod 777 table.txt

сейчас попробуй это должно сработать !!!!

...