Как я могу создать каталог в файловой системе? - PullRequest
1 голос
/ 12 октября 2009

Как создать физический каталог в ОС из PL / SQL? Я посмотрел на команду CREATE OR REPLACE DIRECTORY, но она этого не делает. UTL_FILE также не представляется способным.

Ответы [ 4 ]

5 голосов
/ 12 октября 2009

UTL_FILE по-прежнему не хватает этой возможности - возможно, это было перенесено из прежних DIRECTORY дней, когда вам приходилось явно определять каталоги файлов ОС, к которым вы могли обращаться в параметре запуска, поэтому не было необходимости создавать каталоги динамически в любом случае.

Я думаю, что самый простой способ сделать это с помощью хранимой процедуры Oracle Java, которая использует:

    File f = new File(dirname);
    return (f.mkdir()) ? 1 : 0;

Если вы идете по этому пути, убедитесь, что вы используете dbms_java.grant_permission для предоставления java.io.FilePermission пользователю, которому принадлежит исполняемый код.

4 голосов
/ 14 октября 2009

В конце концов я нашел более простое решение. Используйте

select os_command.exec('mkdir /home/oracle/mydir') from dual;

или просто

x := os_command.exec('mkdir /home/oracle/mydir');
0 голосов
/ 12 октября 2009

Я только что проверил новые документы для базы данных версии 11.2, и я до сих пор не могу найти никакой процедуры для создания каталога. Поэтому, как и другим респондентам, я рекомендую использовать подпрограмму Java или C.

0 голосов
/ 12 октября 2009

Я считаю, что единственный способ сделать это - использовать внешнюю процедуру (C или Java) и вызывать ее через PL / SQL. Сам PL / SQL не имеет средств для создания физического каталога ОС.

PL / SQL Tips предоставляет хороший пример того, как создать внешнюю процедуру C, которая выполняет команды оболочки. Обратите внимание, что я бы не посоветовал это делать по соображениям безопасности.

Если вы можете сначала создать каталог, то можете использовать

create or replace directory myDir as '<path-to-dir>/myDir';

Обратите внимание, что вам необходимо иметь привилегию CREATE ANY DIRECTORY, назначенную пользователю, выполняющему команду. После создания каталога с помощью приведенной выше команды обязательно назначьте все необходимые права доступа к каталогу другим пользователям.

grant read, write on directory myDir to testUsers;
...