declare
a_fname AEI_FILE_LIST.FILENAME%type;
a_fpath AEI_FILE_LIST.FILEDATE%type;
--用来遍历一个存放着文件名称的表
CURSOR CUR_FILENAME IS
SELECT FILENAME FROM AEI_FILE_LIST;
filehandle utl_file.file_type;
filebuffer varchar(1000);
BEGIN
open CUR_FILENAME;
loop
fetch CUR_FILENAME into a_fname;
exit when CUR_FILENAME%notfound;
--TEMP是已经建好的Directories,a_fname是一个正确的文件名
filehandle := utl_file.fopen('TEMP',a_fname,'r');
loop
BEGIN
--读取文件内容,都是TXT格式的
utl_file.get_line(filehandle,filebuffer);
--内容插到另一个表的一个字段中,TEST表已建好,字段a已建
INSERT INTO TEST(A) VALUES(filebuffer);
EXCEPTION
WHEN no_data_found THEN
exit;
End;
end loop;
utl_file.fclose(filehandle);
end loop;
close CUR_FILENAME;
COMMIT;
end;
------解决思路----------------------
1. 你的OS 环境是什么,如果是 LINUX 的话,检查一下权限,看看 oracle 用户有没有对这个文件的 r 权限。
2.先读一个文件试试,看看有什么问题,最好是一个小文件,行数少的那种。
------解决思路----------------------
SQL> create table AEI_FILE_LIST (FILENAME varchar2(20),FILEDATE varchar2(20));
表已创建。
SQL> insert into AEI_FILE_LIST values('a.txt','');
已创建 1 行。
SQL> insert into AEI_FILE_LIST values('b.txt','');
已创建 1 行。
SQL> commit;
提交完成。
SQL> create or replace directory TEMP as 'D:\TEMP';
目录已创建。
SQL> create table test (a varchar2(100));
表已创建。
SQL> select * from a;
select * from a
*
ERROR 位于第 1 行:
ORA-00942: 表或视图不存在
SQL> select * from test;
未选定行
SQL> select * from test;
未选定行
SQL> create or replace procedure q is
2 a_fname AEI_FILE_LIST.FILENAME%type;
3 a_fpath AEI_FILE_LIST.FILEDATE%type;
4
5 --用来遍历一个存放着文件名称的表
6 CURSOR CUR_FILENAME IS
7 SELECT FILENAME FROM AEI_FILE_LIST;
8 filehandle utl_file.file_type;
9 filebuffer varchar(1000);
10
11 BEGIN
12 open CUR_FILENAME;
13 loop
14 fetch CUR_FILENAME into a_fname;
15 exit when CUR_FILENAME%notfound;
16 --TEMP是已经建好的Directories,a_fname是一个正确的文件名
17 filehandle := utl_file.fopen('TEMP',a_fname,'r');
18 loop
19 BEGIN
20 --读取文件内容,都是TXT格式的
21 utl_file.get_line(filehandle,filebuffer);
22 --内容插到另一个表的一个字段中,TEST表已建好,字段a已建
23 INSERT INTO TEST(A) VALUES(filebuffer);
24 EXCEPTION
25 WHEN no_data_found THEN
26 exit;
27 End;
28 end loop;
29 utl_file.fclose(filehandle);
30 end loop;
31 close CUR_FILENAME;
32 COMMIT;
33 end;
34 /
过程已创建。
SQL> exec q;
PL/SQL 过程已成功完成。
SQL> select * from test;
A
--------------------------------------------------------------------------------
aaaaaaaaaa
bbbbbbbbbbb