Проблемы с BFILE в Oracle9
От: JMaxus  
Дата: 04.11.03 16:30
Оценка:
В Oracle9 пытаюсь работать с BFILE.
Делаю таблицу с полем такого типа.

create table my_table (bfile_field bfile).... ;

Потом на сервере делаю

create directory test2 as 'c:\oracle\test';
insert into my_table (bfile_field) values (bfilename('test2','c:\1.txt'));
commit;

Все проходит, но в каталоге c:\oracle\test ничего нет, и соответственно при использовании поля bfile_field как LOB объекта возникают ошибки. В чем может быть проблема?
Re: Проблемы с BFILE в Oracle9
От: Sergey Ten http://www.fastalgo.com
Дата: 04.11.03 23:42
Оценка: 6 (1)
Здравствуйте, JMaxus, Вы писали:

JM>В Oracle9 пытаюсь работать с BFILE.

JM>Делаю таблицу с полем такого типа.

JM>create table my_table (bfile_field bfile).... ;


JM>Потом на сервере делаю


JM>create directory test2 as 'c:\oracle\test';

JM>insert into my_table (bfile_field) values (bfilename('test2','c:\1.txt'));
JM>commit;

JM>Все проходит, но в каталоге c:\oracle\test ничего нет, и соответственно при использовании поля bfile_field как LOB объекта возникают ошибки. В чем может быть проблема?


Проблема номер 0: В bfilename имя файла должно быть без пути, т.е. '1.txt', и он уже должен находиться в директории c:\oracle\test на сервере

Проблема номер 1: Когда что-то заключается в кавычки, оно станосится чувствительным к регистру, т.е. первым параметром bfilename будет 'TEST2'
insert into my_table (bfile_field) values (bfilename('TEST2','1.txt'));

После этого — селектом получаем lob locator и подсовываем его в соответствующие процедуры пакета dbms_lob:

declare
  lob_loc bfile;
begin
  select bfile_field into lob_loc from my_table;
  
  if dbms_lob.fileexists(lob_loc) = 1 then
    dbms_output.put_line('File exists');
  else
    dbms_output.put_line('File does not exist');  
  end if;
end;

File exists

Re[2]: Проблемы с BFILE в Oracle9
От: JMaxus  
Дата: 05.11.03 10:20
Оценка:
ST>Проблема номер 0: В bfilename имя файла должно быть без пути, т.е. '1.txt', и он уже должен находиться в директории c:\oracle\test на сервере

ST>Проблема номер 1: Когда что-то заключается в кавычки, оно станосится чувствительным к регистру, т.е. первым параметром bfilename будет 'TEST2'

ST>
ST>insert into my_table (bfile_field) values (bfilename('TEST2','1.txt'));
ST>

ST>После этого — селектом получаем lob locator и подсовываем его в соответствующие процедуры пакета dbms_lob:

ST>
ST>declare
ST>  lob_loc bfile;
ST>begin
ST>  select bfile_field into lob_loc from my_table;
  
ST>  if dbms_lob.fileexists(lob_loc) = 1 then
ST>    dbms_output.put_line('File exists');
ST>  else
ST>    dbms_output.put_line('File does not exist');  
ST>  end if;
ST>end;
ST>

ST>

ST>File exists


Сделал точно, как написано. Странно, процедура выдала ошибку
ORA-22285: non-existent directory or file for FILEEXISTS operation
Re[3]: Проблемы с BFILE в Oracle9
От: Sergey Ten http://www.fastalgo.com
Дата: 05.11.03 13:17
Оценка:
Здравствуйте, JMaxus, Вы писали:

JM>Сделал точно, как написано. Странно, процедура выдала ошибку

JM>ORA-22285: non-existent directory or file for FILEEXISTS operation

SQL> host mkdir c:\blahblah

SQL> host copy nul c:\blahblah\test.txt

SQL> create directory test_blahblah as 'c:\blahblah';

Directory created.

SQL> create table test_bfile (bf bfile);

Table created.

SQL> insert into test_bfile values(bfilename('TEST_BLAHBLAH', 'test.txt'));

1 row created.

SQL> declare
  2    lob_loc bfile;
  3  begin
  4    select bf into lob_loc from test_bfile;
  5    if dbms_lob.fileexists(lob_loc) = 1 then
  6      dbms_output.put_line('File exists');
  7    else
  8      dbms_output.put_line('File does not exist');
  9    end if;
 10  end;
 11  /


File exists 
                                                               
PL/SQL procedure successfully completed.

SQL> spool off
Re[4]: Проблемы с BFILE в Oracle9
От: JMaxus  
Дата: 06.11.03 08:08
Оценка:
Здравствуйте, Sergey Ten, Вы писали:

ST>
SQL>> host mkdir c:\blahblah

SQL>> host copy nul c:\blahblah\test.txt

SQL>> create directory test_blahblah as 'c:\blahblah';

ST>Directory created.

SQL>> create table test_bfile (bf bfile);

ST>Table created.

SQL>> insert into test_bfile values(bfilename('TEST_BLAHBLAH', 'test.txt'));

ST>1 row created.

SQL>> declare
ST>  2    lob_loc bfile;
ST>  3  begin
ST>  4    select bf into lob_loc from test_bfile;
ST>  5    if dbms_lob.fileexists(lob_loc) = 1 then
ST>  6      dbms_output.put_line('File exists');
ST>  7    else
ST>  8      dbms_output.put_line('File does not exist');
ST>  9    end if;
ST> 10  end;
ST> 11  /

ST>
ST>File exists 
ST>                                                               
ST>PL/SQL procedure successfully completed.

SQL>> spool off
ST>



Большое спасибо!! Все работает, это я сделал ошибку
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.