ORACLE APEX и UTL_FILE - создание файла на сервере, где установлена ​​база данных - PullRequest
1 голос
/ 28 июля 2010

Я не уверен, что то, что я пытаюсь сделать, возможно.Я вызываю процедуру из приложения APEX (или из семинара по SQL).Эта процедура должна писать на сервер, используя UTl_FILE.Тем не менее, это не работает.Я не получаю никаких ошибок, все соответствующие сообщения отображаются и обновления сделаны.Однако выходной файл не создается.Когда я запускаю процесс из командной строки SQL на сервере, он работает!Поскольку APEX находится в базе данных на сервере, я бы подумал, что могу вызвать процесс для записи на сервер.Я сделал все необходимые вещи, такие как создание каталога и предоставление ему необходимых привилегий.Я даже попытался использовать неправильное имя каталога и получил ожидаемую ошибку, поэтому каталог подтверждается.Я использую Oracle 10g версии 10.2.0.3.0 и APEX версии 3.2.0.00.27.Oracle работает на Redhat Linux.Все соответствующие объекты находятся в моей схеме.Это возможно, или мне нужно найти другой способ сделать это?Я предоставил права доступа READ и WRITE в каталоге для APEX_PUBLIC_USER?Я был бы очень признателен за помощь в этом, потому что это очень расстраивает!Я использую UTL_FILE для многих вещей, поэтому я хорошо знаком с тем, как это работает.

Я сделал 2 вещи

1) Я создал объект каталога, чтобы указать на мой локальный диск C,как и ожидалось, я получил следующее сообщение:

ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 475
ORA-29283: invalid file operation

2) Я запустил следующий код из SQL Workshop:

declare

v_get boolean;
v_size number;
v_block binary_integer;


begin

utl_file.fgetattr('SQUID_TEST','settlement_dets_20000106.csv',
                  v_get,v_size,v_block);
if v_get then
dbms_output.put_line('It exists');
else
dbms_output.put_line('Shame!');
end if;
end;

И вывод был следующим:

Shame!

Statement processed.


0.00 seconds

Я запустил тот же код из SQL plus на сервере, и результат был:

It exists

PL/SQL procedure successfully completed.

Это правильно, поскольку файл существует.Это действительно сбивает с толку, я не получаю никаких ошибок, и теперь я предоставил READ и WRITE моей директории Oracle для APEX_PUBLIC_USER и APEX_030200.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...