Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Процедура не видит файл/директорию 
V
    Опции темы
darkvivi
Дата 13.10.2013, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



 Здравствуйте! Не получается загрузить картинку в blob, вызывается ошибка, якобы не существует файл или директория, хотя на самом деле они есть, вот код: 

Сначала создаю таблицу, затем саму процедуру с параметрами, потом делаю execute. Дело в том, что пока я не добавил параметр "dir in varchar2" всё работало достаточно гладко..подскажите, плииз, в чём может быть ошибка?

Код

create table temp_photo0 
 (
 ID    NUMBER(3)     NOT NULL,
 PHOTO_NAME      VARCHAR2(50),
 PHOTO    BLOB
 );
 
 create or replace PROCEDURE load_file0(
 p_id number, dir in varchar2,
 p_photo_name in varchar2) IS
 src_file BFILE;
 dst_file BLOB;
 lgh_file BINARY_INTEGER;
 BEGIN
  src_file := bfilename(dir, p_photo_name);
  -- insert a NULL record to lock
  INSERT INTO temp_photo0
  (id, photo_name, photo)
  VALUES
  (p_id , p_photo_name ,EMPTY_BLOB())
  RETURNING photo INTO dst_file;
  -- lock record
  SELECT photo 
  INTO dst_file
  FROM temp_photo0
  WHERE id = p_id
  AND photo_name = p_photo_name
  FOR UPDATE;
  -- open the file
  dbms_lob.fileopen(src_file, dbms_lob.file_readonly);
  -- determine length
  lgh_file := dbms_lob.getlength(src_file);
  -- read the file
  dbms_lob.loadfromfile(dst_file, src_file, lgh_file);
  -- update the blob field
  UPDATE temp_photo0 
  SET photo = dst_file
  WHERE id = p_id
  AND photo_name = p_photo_name;
  -- close file
  dbms_lob.fileclose(src_file); 
 END load_file0;


execute load_file0(1,'c:\photo_dir','rdht4.jpg') ; 


Вот ошибка:
Error report:
ORA-22285: non-existent directory or file for FILEOPEN operation
ORA-06512: at "SYS.DBMS_LOB", line 805
ORA-06512: at "NIKITA.LOAD_FILE0", line 23
ORA-06512: at line 1
22285. 00000 -  "non-existent directory or file for %s operation"
*Cause:    Attempted to access a directory that does not exist, or attempted
           to access a file in a directory that does not exist.
*Action:   Ensure that a system object corresponding to the specified
           directory exists in the database dictionary, or
           make sure the name is correct.


Это сообщение отредактировал(а) darkvivi - 13.10.2013, 12:56
PM MAIL   Вверх
Zloxa
Дата 13.10.2013, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(darkvivi @  13.10.2013,  13:14 Найти цитируемый пост)
bfilename(dir, p_photo_name);

rtfm  BFILENAME
Цитата

'directory' is a database object that serves as an alias for a full path name on the server file system where the files are actually located.


rtfm create directory

Добавлено через 1 минуту и 17 секунд
Цитата(darkvivi @  13.10.2013,  13:14 Найти цитируемый пост)
c:\photo_dir

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


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
darkvivi
Дата 13.10.2013, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 24.9.2008

Репутация: нет
Всего: 1



  То есть, лучше всего указать dir как directory, а не varchar2?
 А разве из directory нельзя сделать параметрическую переменную? :( Мне выдаёт ошибку...
Error(3,18): PLS-00201: identifier 'DIRECTORY' must be declared

Это сообщение отредактировал(а) darkvivi - 13.10.2013, 17:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.