当前位置: 代码迷 >> Oracle开发 >> 小弟刚开始学习,仿照着写了一个循环读取文件内容的过程,求帮助
  详细解决方案

小弟刚开始学习,仿照着写了一个循环读取文件内容的过程,求帮助

热度:130   发布时间:2016-04-24 06:29:44.0
小弟刚开始学习,模仿着写了一个循环读取文件内容的过程,求帮助



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


  相关解决方案