2013-10-08 83 views
0

大家好。 我是PL/SQL和Oracle數據庫的新手。 我需要讀取/寫入服務器上存在的文件,所以我使用的是utl_file.fopen('/home/tmp/','text.txt','R'),但Oracle顯示錯誤「無效的目錄路徑」。utl_file.fopen沒有'創建目錄...爲...'

主要問題是,我只有用戶的權限,所以我不能使用的命令等create directory user_dir as '/home/temp/'或查看UTL_FILE_DIR只需show parameter utl_file_dir; 我用這個代碼,以查看UTL_FILE_DIR:

SQL> set serveroutput on; 
SQL> Declare 
    2  Intval number; 
    3  Strval varchar2 (500); 
    4  Begin 
    5  If (dbms_utility.get_parameter_value('utl_file_dir', intval,strval)=0) 
    6  Then dbms_output.put_line('value ='||intval); 
    7  Else dbms_output.put_line('value = '||strval); 
    8  End if; 
    9  End; 
10/

和輸出是「值= 0 」。

我google'd很多,但沒有找到任何解決方案,所以我在這裏尋求幫助。

讀取文件我用這個代碼:

declare 
    f utl_file.file_type; 
    s varchar2(200); 
begin 
    f := utl_file.fopen('/home/tmp/','text.txt','R'); 
    loop 
     utl_file.get_line(f,s); 
     dbms_output.put_line(s); 
    end loop; 
exception 
    when NO_DATA_FOUND then 
     utl_file.fclose(f); 
end; 

回答

2

如果您沒有權限創建目錄對象(並假設目錄對象不存在),你需要發送一個向您的DBA(或具有相應權限的其他人)發送請求,以便爲您創建目錄並授予您對該目錄的訪問權限。

utl_file_dir是一個過時的參數,比目錄對象靈活得多,需要重新啓動數據庫才能更改 - 除非您使用的是Oracle 8.1.x,或者您正在處理寫回的傳統進程8.1.x天,並沒有更新使用目錄,你應該忽略它。

+0

謝謝你的回答,但我怎樣才能讀取pl sql文件?我可以在shell中使用mkdir和cat命令,但不能使用sqlplus創建目錄。 –

+0

@AlexeevMichael - 如果您想從PL/SQL中讀取文件(請記住,只能訪問數據庫服務器的文件系統上的文件),則需要授予適當的權限。有人(你的DBA也許)實際上需要創建目錄對象並授予你對它的訪問權限。事實上,您的操作系統帳戶有權創建操作系統目錄並不直接相關(儘管如果您想要從您的DBA請求CREATE DIRECTORY特權,您可以使用它)。 –

+0

非常感謝您的回答 –