_创建日志_


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、写一个函数创建目录并写入数据
create or replace function cux_my(code  VARCHAR2)
  RETURN VARCHAR2 is

filehandle utl_file.file_type; --句柄
 a varchar2(100);

begin
  a:=TO_CHAR(SYSDATE(),'YYMMDDHH24MISS');
filehandle := utl_file.fopen('UTL_FILE_DIR',a || '.txt','a'); --打开文件
utl_file.put_line(filehandle,code );--写入一行记录
--dbms_output.put_line('1');
utl_file.fclose(filehandle);--关闭句柄

  return 'OK';
end;
3、在数据清洗的存储过程中调用函数
首先在上边声明变量
 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 || '的数据插入失败');
4、

 

______________________________创建日志_______________________________________

-- 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('UTL_FILE_DIR',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('UTL_FILE_DIR',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('UTL_FILE_DIR', '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;


 




_____________________________________________________________________



java 调用函数:http://www.cnblogs.com/xwdreamer/archive/2011/10/25/2296947.html

 

posted @ 2016-05-09 01:16  孟宇  阅读(222)  评论(0编辑  收藏  举报