用PLSQL中的UTL_FILE包来读写文件

来源:互联网 发布:it认证培训班 编辑:程序博客网 时间:2024/05/21 07:11

我们知道PLSQL是一门非常强大的语言,上次有用这们语言做过发送邮件的程序,今天我们来看一下,如何用PLSQL来操作文件。

首先我们使用管理员账号来创建一个路径,并将这个路径进行授权给相应的用户。

CREATE OR REPLACE directory file_dir AS 'D:\test'; --windows系统路径grant READ, WRITE ON directory file_dir TO customerUser; --路径授权,添加对路径读、写权限grant EXECUTE ON utl_file TO customerUser; --utl_file包授权,添加执行权限

完成上面的授权之后,我们来使用这个customerUser 账号登录进去(如我使用的是PL/SQL Develpoer)。


如何保存数据到文件
这里我们分为三步:打开文件,写入数据,关闭文件

--====保存数据到文件====--DECLARE  v_file  utl_file.file_type;  v_input CLOB := '我是要保存到文件里面的内容';BEGIN  --打开文件  v_file := utl_file.fopen('FILE_DIR', 'data.txt', 'w');  --将数据写入到文件中  utl_file.put_line(v_file, v_input);  --关闭文件  utl_file.fclose(v_file);EXCEPTION  WHEN utl_file.access_denied THEN    dbms_output.put_line('拒绝访问!');  WHEN OTHERS THEN    dbms_output.put_line('SQLERRM: ' || SQLERRM);END;

注意到上面的打开文件的代码中使用的打开模式是w
这里文件的打开模式有如下三种
W:是写文件,文件不存在则创建文件,如果文件存在则覆盖之前文件的内容
A:是追加,若文件不存在则创建文件,文件存在,则在文件结束后面追加内容
还有一种在读文件的时候会使用
R:读文件,文件不存在报错,文件存在则将文件内容读出来


如何读取文件中的数据
在从文件读取数据的过程我们也分为三步:打开文件,读取文件数据,关闭文件

--====读取文件中的数据====--DECLARE  v_file   utl_file.file_type;  v_output CLOB := '';BEGIN  --打开文件  v_file := utl_file.fopen('FILE_DIR', 'data.txt', 'r');  --将文件的数据写入到变量中  utl_file.get_line(v_file, v_output);  --关闭文件  utl_file.fclose(v_file);  --测试输出文件内容  dbms_output.put_line(v_output);EXCEPTION  WHEN utl_file.access_denied THEN    dbms_output.put_line('拒绝访问!');  WHEN OTHERS THEN    dbms_output.put_line('SQLERRM: ' || SQLERRM);END;

如何拷贝文件中的数据待另外一个文件
这是我们直接使用UTL_FILE 里面的fcopy() 来进行文件的复制操作

--====从一个文件拷贝数据到另外一个文件====--BEGIN  utl_file.fcopy(src_location  => 'FILE_DIR',                 src_filename  => 'src.txt',                 dest_location => 'FILE_DIR',                 dest_filename => 'dst.txt',                 start_line    => '1',                 end_line      => '4');EXCEPTION  WHEN utl_file.access_denied THEN    dbms_output.put_line('拒绝访问!');  WHEN OTHERS THEN    dbms_output.put_line('SQLERRM: ' || SQLERRM);END;

上面代码中的start_lineend_line 分别表示复制源文件的行数区间,不是必要的字段,默认复制全部内容。


更多的内容可以参考Oracle之UTL_FILE 包用法详解


阅读全文
0 0
原创粉丝点击