如何使用PLSQL程序从Text文件中插入Oracle 10g中的表?

时间:2012-03-28 06:51:38

标签: sql oracle plsql oracle10g

我在Oracle 10g中尝试这个PL / SQL程序。从loaction'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;

3 个答案:

答案 0 :(得分:1)

您可以尝试不同的方法:
创建一个external table,这是一个映射到文件的表,用于读取文件,然后只需从外部insert-select到您的表 (或者你甚至不需要将它插入另一张桌子?)

答案 1 :(得分:0)

你可能需要在这一行上使用小写的'r'......

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

答案 2 :(得分:0)

你的循环没有检查文件结尾,所以逻辑上在某个时候文件读取操作应该引发异常,这可能是你得到的。

此外,您还必须检查目录(FILESDIR1)是否指向正确的操作系统目录,并且您已被授予对该目录的访问权限,并且该文件位于该操作系统目录中(不在您的本地文件系统上)。

顺便说一下。在某些情况下,您可以更好地使用SQL Loader批量加载表中的数据,尤其是。如果文件很大,因为你可以指示SQL加载器直接加载数据文件中的数据,绕过SQL层(由INSERT语句生成)。