如何在PL / SQL中的操作系统上创建物理目录?我查看了CREATE OR REPLACE DIRECTORY
命令,但是没有这样做。 UTL_FILE
似乎也没有能力。
答案 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例程。