utl_file学习

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  /

优快云上的实例

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 shan 2,li shi 3,wang wu 4、创建一个存储csv数据的表testcsv。 sql>create table testcsv(id number,name varchar2(20)); 5、创建一存储过程readcsv CREATE 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');

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值