【问题标题】:How to insert into Table in Oracle 10g from Text file using PLSQL program?如何使用 PLSQL 程序从文本文件插入 Oracle 10g 中的表?
【发布时间】:2026-01-20 11:55:02
【问题描述】:

我正在 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;

【问题讨论】:

标签: sql oracle plsql oracle10g


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 它必须是小写的'r'。您在原始问题中使用了大写字母。
    【解决方案3】:

    您的循环不检查文件结尾,因此从逻辑上讲,文件读取操作在某些时候应该引发异常,而这大概就是您得到的异常。

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

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

    【讨论】:

      最近更新 更多