如何在文件系统上创建目录?

时间:2009-10-12 11:40:49

标签: oracle plsql oracle10g directory

如何在PL / SQL中的操作系统上创建物理目录?我查看了CREATE OR REPLACE DIRECTORY命令,但是没有这样做。 UTL_FILE似乎也没有能力。

4 个答案:

答案 0 :(得分:5)

UTL_FILE仍然缺乏此功能 - 可能是前期DIRECTORY对象日的延续,您必须明确定义可以在启动参数中访问的操作系统文件目录,因此不需要无论如何都要动态创建目录。

我认为最简单的方法是使用Oracle Java存储过程:

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

如果你走这条路线,请确保使用dbms_java.grant_permission向拥有执行代码的用户授予java.io.FilePermission

答案 1 :(得分:4)

最后我找到了一个更简单的解决方案。使用

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

或只是

x := os_command.exec('mkdir /home/oracle/mydir');

答案 2 :(得分:0)

我认为唯一的方法是使用外部过程(C或Java)并通过PL / SQL调用它。 PL / SQL本身无法创建物理OS目录。

PL/SQL Tips提供了一个很好的示例,说明如何创建执行shell命令的C外部过程。请注意,出于安全原因,我不认为这是最佳做法。

您可以先创建目录,然后使用

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

请注意,您需要为执行命令的用户分配CREATE ANY DIRECTORY权限。使用上面的命令创建目录后,请务必将该目录的任何所需权限分配给其他用户。

grant read, write on directory myDir to testUsers;

答案 3 :(得分:0)

我刚检查了数据库版本11.2的新文档,但仍然没有找到创建目录的例程。因此,与其他受访者一样,我建议使用Java或C例程。