• 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;

    _____________________________________________________________________

  • 相关阅读:
    干掉你的老板(小游戏)
    SEO优化数据系列表(图)
    javascript动态加载三
    javascript动态加载二
    截屏
    vimdiff
    pscp scp ftp samba windows send files to linux
    login windows 10 with passwd instead of pin
    modify requirements.txt
    整片注释 ,shell
  • 原文地址:https://www.cnblogs.com/xinxin1994/p/5474080.html
Copyright © 2020-2023  润新知