oracle 利用UTL_FILE包操作檔案

來源:互聯網
上載者:User

前幾天做了用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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.