Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
Уже прочел все сходные ветки, голову сломал, но не могу понять, как обратиться к файлу.

По идее вроде все просто:

Declare
DateFile Utl_File.File_Type;
...
Begin
DateFile := Utl_File.FOPEN('C:\dir1', 'Textfile1.txt', 'R');
...


пишет в ответ:
ORA-29280: недопустимый путь доступа к каталогу
ORA-06512: на "SYS.UTL_FILE", line 33
ORA-06512: на "SYS.UTL_FILE", line 436
ORA-06512: на line 37



Думал, что проблема с правами, пробовал делать так:
автор
SQL> create directory dir1 as 'c:\';

Каталог создан.

SQL> show parameter utl_file_dir;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string
SQL>


Может быть дело в utl_file_dir, не знаю до этого никогда не пользовался Utl_File. Подскажите, в чем дело?
1 ноя 12, 08:13    [13406030]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10768
zurus
DateFile := Utl_File.FOPEN('C:\dir1', 'Textfile1.txt', 'R');
...
SQL> create directory dir1 as 'c:\Путь';
Подскажите, в чем дело?
Oracle directory это имя, которое, в общем случае, никак не соотносится с путём в файловой системе.
1 ноя 12, 08:21    [13406043]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
-2-
Member

Откуда:
Сообщений: 15330
Basil A. Sidorov
Oracle directory это имя, которое, в общем случае, никак не соотносится с путём в файловой системе.
в частном случае с параметром utl_file это не так и рекомендации зависят от версии.
1 ноя 12, 08:31    [13406070]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
Версия Оракла 10g, подскажите, как можно решить проблему, дело в том, что есть необходимость, чтобы текстовый файл располагался за пределами oracle_home, это возможно?
1 ноя 12, 08:34    [13406082]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Формально он прав
Речь не про параметр FOPEN, а про "Oracle directory"
1 ноя 12, 08:35    [13406086]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
сделал:
автор
DateFile := Utl_File.FOPEN('dir1', 'Textfile1.txt', 'R');


суть не поменялась:
автор
ORA-29280: недопустимый путь доступа к каталогу
ORA-06512: на "SYS.UTL_FILE", line 33
ORA-06512: на "SYS.UTL_FILE", line 436
ORA-06512: на line 37
1 ноя 12, 08:37    [13406089]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
Вячеслав Любомудров,

Так что обязательно в папку с Oracle кидать? Можно ж наверно как-то это обойти, поначалу я вообще хотел на удаленный сетевой диск путь прописывать, но почитав о проблемах с этим связанными, решил от данной идеи отказаться.
1 ноя 12, 08:40    [13406095]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Речь не о том
А по своей проблеме воспользуйся поиском по сайту
1 ноя 12, 08:45    [13406107]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Ura!
Member

Откуда:
Сообщений: 273
zurus,

Для ускорения понимания: directory (про которую тебе здесь люди говорят) это не первод на английский слова "папка", а объект в БД.
1 ноя 12, 09:20    [13406253]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
Ura!,

Ясно, но не очень будем курить мануал. Вообще мне надо то всего лишь открыть текстовый файл и прочесть с него информацию. Действие самое простое, а столько проблем %)
1 ноя 12, 09:25    [13406277]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
zurus
Действие самое простое, а столько проблем

Проблемы определяются именно тем, что тебе надо получить доступ к файловой системе сервера БД. Представь себе, что бы было, если это мог сделать без проблем любой пользователь...
1 ноя 12, 09:34    [13406326]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
tru55,

я это понимаю, я не понимаю какие права нужны или какое определение в директориях Оракл нужно, чтобы получить этот доступ. Уже все что можно перепробовал и права всевозможные давал и создавал через "create directory" в sql plus и bfile пробовал, толку только ноль. Ну что буду дальше разбираться, уже тем 10-15 по этому поводу здесь перечел. :)
1 ноя 12, 09:38    [13406350]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Еще подсказка:
Посмотри, что у тебя в ALL_DIRECTORIES
1 ноя 12, 09:39    [13406359]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
автор
SQL> select * from all_directories;

OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ -------------------------------------------------------------------------------------
SYS DIR1 c:\

SYS SUBDIR C:\oracle\product\10.2.0\db_1\demo\schema\order_entry\/2002/Sep

SYS XMLDIR C:\oracle\product\10.2.0\db_1\demo\schema\order_entry\


OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------- ---------------------------------- -----------------------------------------------------------------------
SYS MEDIA_DIR C:\oracle\product\10.2.0\db_1\demo\schema\product_media\

SYS LOG_FILE_DIR C:\oracle\product\10.2.0\db_1\demo\schema\log\

SYS WORK_DIR C:\ADE\aime_10.2_nt_push\oracle/work


Вроде все нормально.


OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------

SYS DATA_FILE_DIR
C:\oracle\product\10.2.0\db_1\demo\schema\sales_history\

SYS DATA_PUMP_DIR
C:\oracle\product\10.2.0\admin\test1\dpdump\

SYS ADMIN_DIR
C:\ADE\aime_10.2_nt_push\oracle/md/admin


9 строк выбрано.

SQL>
1 ноя 12, 09:57    [13406472]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
Не заметил отличие от введенной тобой команды на создание DIRECTORY?
1 ноя 12, 09:59    [13406485]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
Выше наверно зря все эти станлартные папки вывел, главное, что есть она там:
SYS DIR1 c:\
1 ноя 12, 10:01    [13406498]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
https://www.sql.ru/forum/afsearch.aspx?s=GRANT+READ&submit=%CD%E0%E9%F2%E8&bid=3

Сообщение было отредактировано: 1 ноя 12, 10:03
1 ноя 12, 10:02    [13406503]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Ura!
Member

Откуда:
Сообщений: 273
zurus,

Подозреваю что "c:\" это не директория, хотя хз можно ли просто указывать просто на диск.
PS. Ты права пользователю дал (в Оракле) на эту директорию?
1 ноя 12, 10:08    [13406527]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
Вячеслав Любомудров,

усли речь о DIR1 вместо c:\dir1 в параметре FOPEN, то да пробовал менять - результата не дало.
1 ноя 12, 10:09    [13406534]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
автор
SQL> create or replace directory DIR1 as 'C:\';

Каталог создан.

SQL> GRANT read, write ON DIRECTORY dir1 TO test_user; - test_user пользователь, под которым подключаюсь к базе

Привилегии предоставлены.

SQL> GRANT EXECUTE ON UTL_FILE TO test_user;

Привилегии предоставлены.



автор
DateFile := Utl_File.FOPEN('DIR1', 'dates.txt', 'R');


автор
ORA-29283: недопустимая операция с файлом
ORA-06512: на "SYS.UTL_FILE", line 475
ORA-29283: недопустимая операция с файлом
ORA-06512: на line 40


Лыжи совсем не едут :(
1 ноя 12, 10:23    [13406637]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
пииииииииииииииииииииииии..ц

автор
SQL> create or replace directory DIR1 as 'C:\DIR1';

конечно в этом дело, видимо об этом Вячеслав Любомудров и намекал.
1 ноя 12, 10:35    [13406702]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10768
zurus
Лыжи совсем не едут :(
drop directory dir1;
create directrory dir2 as 'c:/dir1';
grant read, write on directory dir2 to test;
?
1 ноя 12, 10:36    [13406716]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18486
zurus
пииииииииииииииииииииииии..ц

автор
SQL> create or replace directory DIR1 as 'C:\DIR1';

конечно в этом дело, видимо об этом Вячеслав Любомудров и намекал.
Вообще-то нет
Для винды это обычно пофиг
prg> create directory dir1 as 'c:\windows';

Directory created.

prg> declare f utl_file.file_type := utl_file.fopen('DIR1', 'aa.tmp', 'w');
  2  begin utl_file.put_line(f, 'Test');
  3        utl_file.fclose(f);
  4  end;
  5  /

PL/SQL procedure successfully completed.

prg> drop directory dir1;

Directory dropped.

prg> create directory dir1 as 'c:\WiNdOwS';

Directory created.

prg> set serveroutput on
prg> declare f utl_file.file_type := utl_file.fopen('DIR1', 'aa.tmp', 'r');
  2          buf varchar2(100);
  3  begin utl_file.get_line(f, buf);
  4        utl_file.fclose(f);
  5        dbms_output.put_line(buf);
  6  end;
  7  /
Test

PL/SQL procedure successfully completed.
1 ноя 12, 10:53    [13406823]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
Вячеслав Любомудров,

любопытно.
1 ноя 12, 11:01    [13406883]     Ответить | Цитировать Сообщить модератору
 Re: проблема при работе с UTL_FILE.FOPEN  [new]
zurus
Member

Откуда:
Сообщений: 118
Вячеслав Любомудров,

вы имеете ввиду регистр :) я же вместо C:\DIR1 указал просто C:\ но искал файлик естественно по первому пути.
1 ноя 12, 11:04    [13406898]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить