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

如何使用PLSQL程序从文本文件插入Oracle 10g中的表?,sql,oracle,plsql,oracle10g,Sql,Oracle,Plsql,Oracle10g,我正在Oracle 10g中尝试这个PL/SQL程序。从操作“C:\Oracle”读取文本文件(数据),并使用PLSQL脚本将其加载到Oracle表中。但是,我得到了以下错误: 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

我正在Oracle 10g中尝试这个PL/SQL程序。从操作“C:\Oracle”读取文本文件(数据),并使用PLSQL脚本将其加载到Oracle表中。但是,我得到了以下错误:

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;

这一行可能需要小写字母“r”

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

您可以尝试另一种方法:
创建一个映射到文件的表来读取文件,然后从外部将选择插入到表中


(或者您甚至不需要将其插入另一个表?

您的循环不会检查文件的结尾,因此从逻辑上讲,文件读取操作会在某个点引发异常,这可能就是您得到的异常

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


顺便说一句,在某些情况下,您可以更好地使用SQL Loader在表中大容量加载数据,尤其是在文件较大的情况下,因为您可以直接使用SQL Loader在数据文件中直接加载数据,从而绕过SQL层(由INSERT语句生成)总之。

我假设您已经创建了一个目录?请参阅我对该主题的另一个问题的回答:请参阅下面的链接以了解更多详细信息(目录和所有…):它必须是小写的“r”。你原来的问题是大写的。