簡體   English   中英

如何使用PLSQL程序從文本文件插入Oracle 10g中的Table?

[英]How to insert into Table in Oracle 10g from Text file using PLSQL program?

我正在Oracle 10g中嘗試此PL / SQL程序。 要從位置“ C:\\ Oracle”讀取文本文件(數據),並使用PLSQL腳本將其加載到Oracle Table中。 但是,出現以下錯誤:

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;

您可以嘗試其他方法:
創建一個外部表 (該表是映射到文件的表)以讀取文件,然后從外部表中insert-select到您的表
(或者也許您甚至不需要將其插入到其他表中?)

您的循環不檢查文件結尾,因此從邏輯上講,文件讀取操作應該引發異常,這大概是您所得到的。

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

順便說一句。 在某些情況下,您最好使用SQL Loader來批量加載表中的數據,特別是。 如果文件很大,因為您可以指示SQL加載程序直接加載數據文件中的數據,而繞過所有由INSERT語句生成的SQL層。

您可能需要在這行上使用小寫的“ r” ...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM