Can one read/write files from PL/SQL?

chernvj
Дата: 04.11.2008 14:45:29
Беру готовый пример из FAQa:

Can one read/write files from PL/SQL?

The UTL_FILE database package can be used to read and write
operating system files.
A DBA user needs to grant you access to read from/ write
to a specific directory before using this package. Here is an example:

CONNECT / AS SYSDBA

CREATE OR REPLACE DIRECTORY mydir AS '/tmp'; !!!!!!!!!!

GRANT read, write ON DIRECTORY mydir TO scott;
Provide user access to the UTL_FILE package (created by catproc.sql):
GRANT EXECUTE ON UTL_FILE TO scott;
Copy and paste these examples to get you started:


Read File:

DECLARE
fHandler UTL_FILE.FILE_TYPE;
buf varchar2(4000);
BEGIN
fHandler := UTL_FILE.FOPEN('MYDIR', 'myfile', 'r');
UTL_FILE.GET_LINE(fHandler, buf);
dbms_output.put_line('DATA FROM FILE: '||buf);
UTL_FILE.FCLOSE(fHandler);
EXCEPTION
WHEN utl_file.invalid_path THEN
raise_application_error(-20000, 'Invalid path. Create directory or set UTL_
FILE_DIR.');
END;
/


Делаю то же самое. И
Если в UTL_FILE.FOPEN прописываю директорию физическую:
UTL_FILE.FOPEN('D:\moiputi\',.,.) => то все OK

А вот если подставляю эту же директорию, созданную
через CREATE OR REPLACE DIRECTORY(как в примере) => то НЕТ:
UTL_FILE.FOPEN('MYDIR',.,.)

ORA-06510: PL/SQL: необработанное исключение, определенное пользователем
ORA-06512: на "SYS.UTL_FILE", line 120
ORA-06512: на "SYS.UTL_FILE", line 204

Что это может быть ?
Мне необходимо именно через DIRECTORY определять !

p.s. Oracle9 под Windows
semirax
Дата: 04.11.2008 15:03:40
chernvj

CREATE OR REPLACE DIRECTORY mydir AS '/tmp'; !!!!!!!!!!


Пример с /tmp - это для *Nix, для Windows укажите полный путь вида 'C:\tmp'. Кроме этого, убедитесь что с правами доступа на уровне NTFS все в порядке.
chernvj
Дата: 04.11.2008 16:23:59
Нуууу, именно так я и сделал:
CREATE OR REPLACE DIRECTORY mydir AS 'D:\moidir\';
max(id)
Дата: 05.11.2008 05:26:33
chernvj
Нуууу, именно так я и сделал:
CREATE OR REPLACE DIRECTORY mydir AS 'D:\moidir\';

На мой взгляд, последний "\" здесь лишний.
Elic
Дата: 05.11.2008 08:16:25
max(id)
chernvj
CREATE OR REPLACE DIRECTORY mydir AS 'D:\moidir\';
На мой взгляд, последний "\" здесь лишний.
Но, как и следовало ожидать, Oracle не дурак - его так просто не проведёшь и это всё-таки работает :)
max(id)
Дата: 05.11.2008 08:42:01
Elic
max(id)
chernvj
CREATE OR REPLACE DIRECTORY mydir AS 'D:\moidir\';
На мой взгляд, последний "\" здесь лишний.
Но, как и следовало ожидать, Oracle не дурак - его так просто не проведёшь и это всё-таки работает :)
Проверил... действительно работает :-) чтож был не прав ;-((