Здравствуйте, 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
В 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 объекта возникают ошибки. В чем может быть проблема?
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
Здравствуйте, 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
Здравствуйте, 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>
Большое спасибо!! Все работает, это я сделал ошибку