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

    _____________________________________________________________________

  • 相关阅读:
    [转载]各种计算机语言的经典书籍
    [转载]VC 常用快捷键
    [转载]Visual Studio中的debug和release版本的区别
    [转载]Visual C++开发工具与调试技巧整理
    [转载]一个游戏程序员的学习资料
    [转载]C++资源之不完全导引(完整版)
    [转载]一个图形爱好者的书架/白话说学计算机图形学
    [摘录]这几本游戏编程书籍你看过吗?
    Oracle分析函数的使用
    [C/C++]C++下基本类型所占位数和取值范围
  • 原文地址:https://www.cnblogs.com/xinxin1994/p/5474080.html
Copyright © 2020-2023  润新知