2015-05-07 30 views
0

我已經使用以下代碼將文件中的文本複製到CLOB。但是它在執行writeappend的位置給了我一個PL/SQL數字或值錯誤。將文本文件中的數據複製到PL/SQL中的CLOB中

declare 
    l_fhandle utl_file.file_type; 
    l_clob CLOB; 
    l_buffer VARCHAR2(4096); 
BEGIN 
    l_fhandle := utl_file.fopen('/data', 
           'FILE.TXT', 
           'R'); 
    dbms_lob.createtemporary(l_clob, TRUE, DBMS_LOB.CALL); 
    LOOP 
    BEGIN 
     utl_file.get_line(L_FHANDLE, l_buffer); 
     dbms_output.put_line(l_buffer); 
    dbms_lob.writeappend(l_clob, length(l_buffer), l_buffer); 

    EXCEPTION 
     WHEN no_data_found THEN 
     dbms_output.put_line('Inside No data found'); 
     INSERT INTO TAB_CLOB_FILE 
      (FILENAME, BODYCONT) 
     VALUES 
      ('FILE', l_clob); 
      dbms_output.put_line('Inserted data into table'); 
     EXIT; 

    END; 
    END LOOP; 
END; 

請幫我弄清楚什麼是錯的

回答

1

你的問題很可能是在這裏:

utl_file.fopen('/data', 'FILE.TXT','R'); 

拳頭參數是Oracle Directory對象的名稱,而不是物理路徑一個目錄。在Oracle文檔中,「文件的目錄位置」,該字符串是一個目錄對象名稱,區分大小寫,缺省值爲大寫,必須爲此目錄對象授予讀取權限,以便UTL_FILE用戶運行FOPEN。不正確的調用應該引發異常。

您需要先創建一個目錄對象,例如:

create directory MY_DIR as '/data'; 

然後改變則fopen調用:utl_file.fopen('MY_DIR', 'FILE.TXT','R');

你可以閱讀有關目錄對象here

+0

嗨,但正如http://stackoverflow.com/questions/2751113/utl-file-fopen-procedure-not-accepting-path-for-directory中給出的,我猜可以打開文件的兩種方法,通過提供目錄名稱以及物理路徑打開,並且在fopen時不會發生錯誤。它發生在writeappend – Annie

相關問題