PL/SQL--)UTL_FILE包的使用介绍(二)

2014-11-24 13:35:36 · 作者: · 浏览: 2
E.invalid_path THEN raise_application_error (-20052, 'Invalid File Location'); WHEN UTL_FILE.invalid_filehandle THEN raise_application_error (-20053, 'Invalid Filehandle'); WHEN UTL_FILE.invalid_operation THEN raise_application_error (-20054, 'Invalid Operation'); WHEN UTL_FILE.read_error THEN raise_application_error (-20055, 'Read Error'); WHEN UTL_FILE.internal_error THEN raise_application_error (-20057, 'Internal Error'); WHEN UTL_FILE.charsetmismatch THEN raise_application_error (-20058, 'Opened With FOPEN_NCHAR But Later I/O Inconsistent'); WHEN UTL_FILE.file_open THEN raise_application_error (-20059, 'File Already Opened'); WHEN UTL_FILE.invalid_maxlinesize THEN raise_application_error (-20060, 'Line Size Exceeds 32K'); WHEN UTL_FILE.invalid_filename THEN raise_application_error (-20061, 'Invalid File Name'); WHEN UTL_FILE.access_denied THEN raise_application_error (-20062, 'File Access Denied By'); WHEN UTL_FILE.invalid_offset THEN raise_application_error (-20063, 'FSEEK Param Less Than 0'); WHEN OTHERS THEN raise_application_error (-20099, 'Unknown UTL_FILE Error'); END read_demo; / --下面是读写模式过程的代码,这个过程实现了从一个数据文件读出并写入到另外一个数据文件 CREATE OR REPLACE PROCEDURE rw_demo IS infile UTL_FILE.file_type; outfile UTL_FILE.file_type; vnewline VARCHAR2 (4000); i PLS_INTEGER; j PLS_INTEGER := 0; seekflag BOOLEAN := TRUE; BEGIN -- open a file to read infile := UTL_FILE.fopen ('DB_UTL_DIR', 'x.txt', 'r'); -->打开源文件用于读取数据 -- open a file to write outfile := UTL_FILE.fopen ('DB_UTL_DIR', 'out.txt', 'w'); -->创建目标文件用于存放数据 -- if the file to read was successfully opened IF UTL_FILE.is_open (infile) THEN -- loop through each line in the file LOOP BEGIN UTL_FILE.get_line (infile, vnewline); -->从源文件读取行 i := UTL_FILE.fgetpos (infile); -->将行的位置赋值并输出 DBMS_OUTPUT.put_line (TO_CHAR (i)); UTL_FILE.put_line (outfile, vnewline, FALSE); -->将得到的数据行写出到文件句柄缓冲 UTL_FILE.fflush (outfile); -->将数据行从缓冲区写入到文件 IF seekflag = TRUE THEN UTL_FILE.fseek (infile, NULL, -30); -->用于调整文件指针,即偏移量 seekflag := FALSE; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN EXIT; END; END LOOP; COMMIT; END IF; UTL_FILE.fclose (infile); -->关闭源文件 UTL_FILE.fclose (outfile); -->关闭目标文件 EXCEPTION WHEN OTHERS THEN raise_application_error (-20099, 'Unknown UTL_FILE Error'); END rw_demo; / 注意在使用UTL_FILE包用到DIRECTORY数据库对象时,名字一定要大写,否则会遭遇“ORA-29280: invalid directory path”错误 主要参考: http://psoug.org/reference/utl_file.html http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/u_file.htm#BABGGEDF

更多参考

使用 DBMS_PROFILER 定位 PL/SQL 瓶颈代码

使用PL/SQL Developer剖析PL/SQL代码

对比 PL/SQL profiler 剖析结果

PL/SQL Profiler 剖析报告生成html

DML Error Logging 特性

PL/SQL --> 游标

PL/SQL --> 隐式游标(SQL%FOUND)

批量SQL之 FORALL 语句

批量SQL之 BULK COLLECT 子句

PL/SQL 集合的初始化与赋值

PL/SQL 联合数组与嵌套表

SQL tuning 步骤

高效SQL语句必杀技

父游标、子游标及共享游标

绑定变量及其优缺点

dbms_xplan之display_cursor函数的使用

dbms_xplan之display函数的使用

执行计划中各字段各模块描述

使用 EXPLAIN PLAN 获取SQL语句执行计划