对磁盘文件的I/O操作
一、对磁盘文件的I/O操作:
方法a:利用Oracle的UTL_FILE包
1. 删除文件
要使用UTL_FILE包首先需要设置utl_file_dir参数,方法如下
以SYS用户登陆后执行以下步骤
1、CREATE [OR REPLACE] DIRECTORY directory AS 'pathname';--创建目录
2、grant read,write on directory TMP to public;
3、alter system set utl_file_dir='d:\' scope=spfile;
4、重启数据库
utl_file.fremove('/ybq/…/Report', --location IN VARCHAR2
'tag.txt' --filename IN VARCHAR2);
或者也可以更简单,直接执行第1、2步,如:
create or replace directory ZZOMPATH as '/ybq/…/Report';
然后再把utl_file.fremove('/ybq/…/Report', 'tag.txt');
改成 utl_file.fremove('ZZOMPATH', 'tag.txt' );
就可以了,不用改系统参数,更不用重启数据库!
2. 复制文件
utl_file.fcopy(
src_location IN VARCHAR2, --源文件目录
src_filename IN VARCHAR2, --源文件名
dest_location IN VARCHAR2, --目标文件目录
dest_filename IN VARCHAR2, --目标文件名
start_line IN BINARY_INTEGER DEFAULT 1, --起始行
end_line IN BINARY_INTEGER DEFAULT NULL); --结束行
3. others
fopen 打开指定的目录路径的文件。
get_line 获取指定文件的一行的文本。
put_line 向指定的文件写入一行文本。
fclose 关闭指定的文件。
方法b:利用shell脚本
1. shell脚本
--定义变量:
TODAY=`date +%Y%m%d` --系统日期
--调用变量
${变量名}
--传入shell脚本的参数
${1} --表示传入shell脚本的第1个参数
---写入内容:echo “内容” >> 路径/文件名
echo "File Dir Is ${1}" >> ${LOG}${TODAY}${TIME}
--到指定目录下
cd ${1}
--判断文件是否存在
if [[ -e "${2}" ]] --判断文件名为 ${2} 的文件是否存在
--创建文件
vi ${2}
--返回值
exit 0
2. 调用shell脚本
首先将shell脚本文件存放到某个路径,并赋权限777,调用例子如下:
--调用‘生成文件.sh‘脚本,生成tag.txt
l_return NUMBER := 0; --执行状态 成功返回0
l_return := zz_edi_common_pkg.command_execute
(p_command => l_file_path || '/step2_rtp.sh ' ||--shell脚本路径及脚本名
'"' || l_file_path || '/Report" ' || --参数1 ${1} 路径
'"' || l_file_name || '" ' || --参数2 ${2} 文件名
'"' ||l_text_content || '"', --参数3 ${3} 内容
p_parameter1 => ' ',
p_parameter2 => ' ',
p_parameter3 => ' ',
p_parameter4 => ' ');
注意:参数间必须用||'" '||隔开 ,并且必须两个参数间的得有空格,
写成||'"'||将无法辨别参数。

浙公网安备 33010602011771号