我在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;
答案 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语句生成)。