关于utl_file包完整的介绍, 参考这里. 关于utl_file包读写系统文件的权限说明, utl_file是不能直接读写操作系统文件的(除了参数utl_file_dir指定的目录), 它需要通过数据库Directory对象实现对文件的读写操作, 关于Oracle Directory参考这里. 因此在使用utl_file操作系统文件时, 需要创建好相关的directory并且分配相关的权限. 这里使用EBS系统自带的TMP目录, 该目录指向的系统目录是/tmp.
首先创建一个存储过程, 如下:
CREATE OR REPLACE PROCEDURE FTRACE(p_msg IN VARCHAR2)
IS
LOG UTL_FILE.file_type;
l_file_name VARCHAR2 (50) := 'ftrace.log'; -- trace file name
BEGIN
LOG := UTL_FILE.fopen ('TMP' -- oracle directory
, l_file_name
,'a'
,32767); -- max lines
UTL_FILE.put_line (LOG, p_msg);
UTL_FILE.fflush (LOG);
UTL_FILE.fclose (LOG);
EXCEPTION WHEN OTHERS THEN
null;
END;
/
创建/tmp/ftrace.log文件, 并且将该文件的权限修改为777, 这样oracle数据库系统用户可写.
touch /tmp/ftrace.log之后就可以在EBS的数据库存储过程或者forms存储过程中调用该存储过程, eg:
chmod 777 /tmp/ftrace.log
ftrace('test');创建shell同义词方便清空和查看日志信息:
alias clst="echo -n '' > /tmp/ftrace.log"
alias chkt="cat /tmp/ftrace.log"
供参考.
--EOF--
没有评论:
发表评论