我们知道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_line
和end_line
分别表示复制源文件的行数区间,不是必要的字段,默认复制全部内容。
更多的内容可以参考Oracle之UTL_FILE 包用法详解