zoukankan      html  css  js  c++  java
  • oracle 利用UTL_FILE包操作文件

    摘录自:http://www.cnblogs.com/pinbo/

    前几天做了用oracle写对表增加,修改时的触发器,触发器内容为每日生成本地文本文件,文件内容为增加、修改表的数据,以便自动上传到服务器上同步数据。

    首先要在本地建立生成文件的目录,这个目录可以设置成oracle的目录变量对应起来,而且要用管理员账号登录赋予对这个目录的读写权限,否则会报错,对目录或文件操作错误等信息;然后就可以写触发器了,思路为如果当天没有生成文件,即建立文件,并写入文件表头信息,下面紧跟着写数据信息,如果存在该文件,就直接写数据。

    create or replace trigger tr_test
      after insert or update or delete on bd_test
      for each row
    declare
      Out_File UTL_FILE.FILE_TYPE;
      DataHead varchar2(80); --DataLine varchar2(80); 
      FileName varchar2(80);
      --vNewLine VARCHAR2(250); 
      opertype    varchar2(500);
      msg         varchar2(500);
      file_exist  BOOLEAN;
      file_length NUMBER(10, 2);
      block_size  BINARY_INTEGER;
    begin
      FileName := 'JiFang_' || to_char(sysdate, 'yyyy.mm.dd') || '.txt';
      utl_file.fgetattr('TESTDIR',
                        FileName,
                        file_exist,
                        file_length,
                        block_size);
      IF file_exist THEN
        Out_File := UTL_FILE.fopen('TESTDIR', FileName, 'a');
      else
        Out_File := UTL_FILE.fopen('TESTDIR', FileName, 'a');
        --W为覆盖 DataHead:='ID'||'名称'||'机房位置' || '地址' ||'x坐标'||'Y坐标'||'操作'; 
        IF utl_file.is_open(Out_File) THEN
          UTL_FILE.put_line(Out_File, DataHead);
        END IF;
      END IF;
      IF utl_file.is_open(Out_File) THEN
        case
          when inserting then
            opertype := 'INSERT';
            msg      := :new.id || :new.MINGCHENG || :new.JIAFANGDANWEI ||
                        :new.DIZHI || :new.X || :new.Y || opertype;
          when updating THEN
            opertype := 'UPDATE';
            msg      := :new.id || :new.MINGCHENG || :new.JIAFANGDANWEI ||
                        :new.DIZHI || :new.X || :new.Y || opertype;
          when DELETING THEN
            opertype := 'DELETE';
            msg      := :old.id || :old.MINGCHENG || :old.JIAFANGDANWEI ||
                        :old.DIZHI || :old.X || :old.Y || opertype;
        end case;
            UTL_FILE.put_line(Out_File, msg);
      END IF;
      utl_file.fclose(Out_File);
    end tr_test;
    

    另外,查看和修改utl_file_dir参数命令,修改后要重新启动数据库。

    show parameter utl_file_dir

    alter system set utl_file_dir = 'D:\test' scope=spfile;

    授权目录操作权限,管理员账户操作。

    create or replace directory BLOBDIR as 'D:\PIC';

    grant read,write on directory BLOBDIR to sharedb;

    GRANT EXECUTE ON utl_file TO sharedb;

    select * from ALL_DIRECTORIES;

  • 相关阅读:
    jquery利用event.which方法获取键盘输入值的代码
    C#计算某个时间距离当前日期的天数
    C#.net 货币格式转换
    用批处理来重启IIS的应用程序池
    C# .net 如何根据访问者IP获取所在地区
    C# 根据IP查询地址归属地
    windows Server 2008 IIS7 503错误解决方案
    技术选型
    bootstrap bable 自动换行问题
    .net 部署IIS 在服务器无法杀掉EXCEL进程
  • 原文地址:https://www.cnblogs.com/advocate/p/1957526.html
Copyright © 2011-2022 走看看