2009-10-12 43 views

回答

4

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

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

或者干脆

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

我只是在这里添加一个链接到os_command,因为我之前不知道它.. http://plsqlexecoscomm.sourceforge.net/ – ShoeLace 2013-08-16 01:51:25

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; 
5

UTL_FILE仍然缺乏这种能力 - 可能是从预DIRECTORY对象天,你必须明确定义,你可以在启动参数访问操作系统文件目录保持,所以没有需要动态创建目录无论如何。

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

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

如果你走这条路线,确保您使用dbms_java.grant_permission授予java.io.FilePermission到拥有执行用户码。

+1

感谢。我讨厌编写Java,除非绝对被迫。最后,我找到了一个更简单的方法,使用os_command.exec和mkdir一起使用PLSQL。看到我下面的评论。 – TrojanName 2011-05-11 10:35:20

0

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

相关问题