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');
997

被折叠的 条评论
为什么被折叠?



