2012-03-28 64 views
0

我正在Oracle 10g中嘗試這個PL/SQL程序。從位於'C:\ Oracle'的文件中讀取文本文件(數據)並使用PLSQL腳本將其加載到Oracle表中。但是,我發現了以下錯誤:如何使用PLSQL程序從文本文件插入Oracle 10g中的表格?

ORA-29283: invalid file operation 
ORA-06512: at "SYS.UTL_FILE", line 488 
ORA-29283: invalid file operation 

這裏是我的腳本:

Create or Replace PROCEDURE Rfile is 
    line VARCHAR2(100); 
    namesfile UTL_FILE.FILE_TYPE; 
BEGIN 
    -- Syntax : FOPEN (directory alias, filename, open mode) 

    namesfile := UTL_FILE.FOPEN('FILESDIR1','NAMES2.TXT','R'); -- open in read mode 

    LOOP 
     UTL_FILE.GET_LINE(namesfile,line,100); 
     dbms_output.put_line(line); 

     insert into names2 values(line);     -- insert into NAMES table 
    END LOOP; 
EXCEPTION 
    WHEN OTHERS THEN 
    dbms_output.put_line('Others exceptions....'); 
END; 
+0

你已經創建了一個目錄我假設? – cagcowboy 2012-03-28 06:59:42

+0

哪一行會引發錯誤? – cagcowboy 2012-03-28 07:00:22

+0

什麼是'FILESDIR1'? – Sathya 2012-03-28 09:34:08

回答

0

您可能需要在此行一個小寫的 'R' ......

namesfile := UTL_FILE.FOPEN('FILESDIR1','NAMES2.TXT','r'); -- open in read mode 
                ^
+0

我已經改爲大寫'R'...但同樣的錯誤... – Balakumaran 2012-03-28 09:02:16

+0

它需要是一個小寫'r'。你原來的問題用大寫字母表示。 – cagcowboy 2012-03-28 09:47:29

+0

我已將其更改爲'r'...同樣的錯誤 – Balakumaran 2012-03-30 11:21:52

1

你可以嘗試不同的方法:
創建一個external table,這是一個表映射到一個文件,讀取文件,然後只是insert-select從外部
(也許你甚至不需要將其插入到不同的表?)

0

你的表你的循環不會在某一時刻的文件檢查文件結束-,所以邏輯讀操作應該引發一個異常,這是你大概猜到的。

此外,您必須檢查目錄(FILESDIR1)是否指向正確的操作系統目錄,並且您已被授予對該目錄的訪問權限,並且該文件位於該操作系統目錄(不在本地文件系統上)。

Btw。在某些情況下,您可以更好地使用SQL Loader來批量加載表中的數據,尤其是,如果文件很大,因爲您可以指示SQL加載程序直接將數據加載到數據文件中,繞過(由INSERT語句生成的)SQL層一起。

相關問題