2016-11-07 6 views
0

Я пытаюсь выбрать байты из базы данных oracle и преобразовать их в файл изображения. Когда я написал процедуру оракула, он останавливается в UTL_FILE.fopen и возвращает ошибку ORA-29280. Сообщество Oracle говорит, что эта ошибка вызвана тем, что пользователь уровня ОС может не иметь права на запись в папку, или мы должны использовать upper_cases. Но для предложения 1 я попытался получить доступ к той же папке, используя .Net и файл изображения был создан успешно, для предложения 2 я попытался использовать верхние регистры, но я все еще сталкиваюсь с той же ошибкой. В чем может быть проблема? Почему я могу создать файл из .Net, но не из oracle? Ниже мой код:Не удается открыть файл из oracle

CREATE OR REPLACE PROCEDURE BLOB_UPDATE (file_name in varchar) IS 

    file_ref UTL_FILE.file_type; 
    raw_max_size constant number := 32767; 

begin 

    file_ref := UTL_FILE.fopen('C:\LOB', file_name, 'WB', raw_max_size); 
    -- Here it stops working ! -- 
    .... 
    utl_file.fclose(file_ref); 

END BLOB_UPDATE; 
+0

Oracle установлен локально на вашем компьютере или вы» re используя удаленный БД? – Kacper

+0

Нет @Kacper, он не установлен на моей машине –

ответ

0

Пожалуйста выполнить на вашей БД:

create or replace directory DIR as 'C:\LOB' 
grant read, write on directory DIR to your_user 

А затем каталог доступа в вашей процедуре по:

file_ref := UTL_FILE.fopen('DIR', file_name, 'WB', raw_max_size); 
+0

Извините, но я не понимаю, что вы подразумеваете под своим пользователем и где я должен добавить код выше, должен ли он быть до создания процедуры oracle или внутри? Извините за мой вопрос, но я все еще новичок в Oracle –

+0

@ H.Al: Из PL/SQL вы не можете получить доступ к произвольному каталогу или файлу. У вас есть только доступ к указанным вами каталогам ('CREATE DIRECTORY XXX AS ...') и предоставил необходимые права перед их использованием. И вы должны ссылаться на них по символическому имени ('XXX' в приведенном выше случае). В противном случае вы получите ошибку ORA-29280. – Codo

+0

@Kacper Теперь я обнаружил, что вы подразумеваете под своим пользователем и что ваш код должен быть реализован в моей процедуре после начала, но я не знаю, почему он возвращает ошибку PLS-00103 ora. Я что-то упустил? –