utl_file学习

来源:互联网 发布:怎么着亚马逊数据 编辑:程序博客网 时间:2024/04/29 22:59

1.建立目录

  SQL>create or replace directory AA as "e/sql";

 

2.查看所建目录

  SQL > select * from DBA_directories;

 

3.读取数据

  declare
  fhandle utl_file.file_type;
  strsql varchar2(100);
  strsql1 varchar2(4000);
  i int := 0;
begin
  fhandle := utl_file.fopen('SQLDIRECTORY','11.sql','R');     
  loop
  begin
  utl_file.get_line(fhandle,strsql);
   execute immediate strsql;
  i := i + 1;
  dbms_output.put_line(i||strsql);
  strsql1 := strsql1||strsql;
  exception
   when no_data_found then
     exit;
 -- dbms_output.put_line(strsql);
  end;
  end loop;
  utl_file.fclose(fhandle);
    dbms_output.put_line(strsql1);  
end;

4.写入数据

 

SQL> declare
  2    fhandle utl_file.file_type;
  3  begin
  4    fhandle := utl_file.fopen('UTL_FILE_DIR', 'example.txt', 'w');
  5    utl_file.put_line(fhandle , 'eygle test write one');
  6    utl_file.put_line(fhandle , 'eygle test write two');
  7    utl_file.fclose(fhandle);
  8  end;
  9  /

CSDN上的实例

1、修改系统参数utl_file_dir,指向你服务器存储csv文件的目录。
sql>alter system set utl_file_dir='c:/temp' scope=spfile;

2、重启数据库使参数生效。

3、生成一个测试的文件test.csv,放入服务器c:/temp,文件内容如下:

SQL code
1,zhang shan2,li shi3,wang wu4、创建一个存储csv数据的表testcsv。sql>create table testcsv(id number,name varchar2(20));5、创建一存储过程readcsvCREATE OR REPLACE PROCEDURE readcsv(i_filename VARCHAR2) IS f utl_file.file_type; buf VARCHAR2(200); v_id pls_integer; v_name varchar2(20); FUNCTION getStrByPos(i_str VARCHAR2, i_pos PLS_INTEGER) RETURN VARCHAR2 IS item VARCHAR2(200); str VARCHAR2(200); BEGIN str := ',' || i_str || ','; FOR i IN 1 .. length(str) - length(REPLACE(str, ',')) - 1 LOOP item := substr(str, instr(str, ',', 1, i) + 1, instr(str, ',', 1, i + 1) - instr(str, ',', 1, i) - 1); EXIT WHEN i = i_pos; END LOOP; RETURN item; END;BEGIN f := utl_file.fopen('c:/temp', i_filename, 'R'); LOOP BEGIN utl_file.get_line(f, buf); v_id := getStrByPos(buf, 1); v_name := getStrByPos(buf, 2); INSERT INTO testcsv VALUES (v_id, v_name); EXCEPTION WHEN no_data_found THEN EXIT; END; END LOOP; COMMIT; utl_file.fclose(f);END;


6、执行存储过程
sql>execute readcsv('test.csv');

 

原创粉丝点击