oracle日志记录函数,Oracle写函数读写日志实例

1、用DBA登录赋权限

create or replace directory D_OUTPUT as ‘D:\TEMP‘;

grant read,write on directory D_OUTPUT to testdb;

GRANT EXECUTE ON utl_file TO testdb;

2、写一个函数创建目录并写入数据

在数据清洗的存储过程中调用函数

首先在上边声明变量

xx varchar2(1000);

然后在执行插入失败的下面调用函数

else

--insert into fail_log(XH,proc_mc,title,content,log_type,log_time) values

(FAIL_LOG_SEQ.NEXTVAL,‘pro_TXZ_ROAD_PLAN‘,‘数据插入失败‘,c_YAID_t,‘ERROR‘,sysdate);

dbms_output.put_line(‘通行证预案表YAID为‘ || c_YAID_t || ‘的数据已经存在‘);

xx :=cux_my(TO_CHAR(SYSDATE(),‘YYYY-MM-DD HH24:MI:SS‘)||‘===>‘ || ‘通行证预案表YAID为‘ || c_YAID_t || ‘的数据插入

失败‘);

______________________________创建日志_______________________________________

-- name 表名称 code 传入数据、失败数据

--存储过程失败情况调用 命名修改有点意义

create or replace function cux_my(name VARCHAR2,code VARCHAR2)

RETURN VARCHAR2 is

filehandle utl_file.file_type; --句柄

a varchar2(100);

begin

a:=TO_CHAR(SYSDATE(),‘YYMMDDHH24MISS‘); -- 时间格式

filehandle := utl_file.fopen(‘D_OUTPUT‘,name||a || ‘.txt‘,‘a‘); --打开文件

utl_file.put_line(filehandle,code );--写入一行记录

--dbms_output.put_line(‘1‘);

utl_file.fclose(filehandle);--关闭句柄

return ‘OK‘;

end;

_____________________________________________________________________

______________________________读取日志_______________________________________

1:-- 当建表方法 需要用这个 读取日志文件 根据 文件名称

-- 此时的filename 是 java 代码调用函数 传入的文件名称,此名称命名方式 一定 一定 要和创建日志 规范一致

create or replace function shuchu(filename VARCHAR2)

RETURN VARCHAR2 is

filehandle utl_file.file_type;

filebuffer varchar(200);

BEGIN

filehandle := utl_file.fopen(‘D_OUTPUT‘,filename || ‘.txt‘,‘r‘);

loop

begin

utl_file.get_line(filehandle,filebuffer);

-- insert into t values(‘‘,filename,filebuffer,filebuffer); 向新建的表中 插入读取的日志数据

dbms_output.put_line(filebuffer);

EXCEPTION

WHEN no_data_found THEN

exit ;

End;

END LOOP;

utl_file.fclose(filehandle);

COMMIT;

return ‘OK‘; --此时 返回可以任意

END;

2,-- 当不需要建表的时候

-- 此时的filename 是 java 代码调用函数 传入的文件名称,此名称命名方式 一定 一定 要和创建日志 规范一致

create or replace function shuchu(filename VARCHAR2)

RETURN VARCHAR2 is

filehandle utl_file.file_type;

filebuffer varchar(200);

BEGIN

filehandle := utl_file.fopen(‘D_OUTPUT‘, ‘160508235600.txt‘,‘r‘);

loop

begin

utl_file.get_line(filehandle,filebuffer);

dbms_output.put_line(filebuffer);

EXCEPTION

WHEN no_data_found THEN

exit ;

End;

END LOOP;

utl_file.fclose(filehandle);

COMMIT;

return filebuffer; --此时 返回值 是读取的日志数据

END;

_____________________________________________________________________

原文:http://www.cnblogs.com/xinxin1994/p/5474080.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值