2009-10-12 59 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例程。

相關問題