溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ORACLE PL/SQL 利用自治事務實現(xiàn)日志記錄

發(fā)布時間:2020-08-08 20:59:38 來源:ITPUB博客 閱讀:185 作者:iliuhailong 欄目:關(guān)系型數(shù)據(jù)庫
程序中通常都要實現(xiàn)日志記錄功能,尤其是事務發(fā)生報錯時的錯誤日志。如果把日志記錄在數(shù)據(jù)庫中,可以方便后續(xù)的查詢和分析。但是如果直接把記錄日志的共能寫在事務中,如果事務發(fā)生ROLLBACK,記錄的日志也會發(fā)生ROLLBACK,明顯時不合適的。但是使用自治事務可以很方便的實現(xiàn)日志記錄功能,并且不會受主事務的影響。下面實現(xiàn)一個簡單的日志記錄例子。

1. 創(chuàng)建日志記錄表

點擊(此處)折疊或打開

  1. create table logtab (
  2.   code integer,
  3.   text varchar2(4000),
  4.   created_on date,
  5.   created_by varchar2(50),
  6.   changed_on date,
  7.   changed_by varchar2(50)
  8.   );
2. 創(chuàng)建記錄日志的package

創(chuàng)建日志包可以方便統(tǒng)一管理日志記錄,并且可以實現(xiàn)自治事務。
log package 包含兩個procedure:putline和saveline,putline實現(xiàn)日志插入,saveline時一個自治事務,調(diào)用putline。在程序中記錄日志時可以直接調(diào)用saveline實現(xiàn)。

點擊(此處)折疊或打開

  1. create or replace package log
  2. is
  3.   procedure putline(code_in in integer, text_in in varchar2);
  4.   procedure saveline(code_in in integer, text_in in varchar2);
  5. end log;
  6. /

  7. create or replace package body log
  8. is
  9.   procedure putline(
  10.     code_in in integer,text_in in varchar2)
  11.   is
  12.   begin
  13.     insert into logtab
  14.     values(code_in,text_in,sysdate,user,sysdate,user);
  15.   end;

  16.   procedure saveline(
  17.     code_in in integer,text_in in varchar2)
  18.   is
  19.     pragma autonomous_transaction;
  20.   begin
  21.     putline(code_in, text_in);
  22.     commit;
  23.     exception when others then rollback;
  24.   end;
  25. end log;
  26. /
3. 一個簡單的例子

選擇一個不存在的數(shù)據(jù),查看logtab里的記錄

點擊(此處)折疊或打開

  1. declare
  2. sal pls_integer;
  3. begin
  4. select salary into sal from employees where employee_id = 11111;
  5. exception
  6.   when others
  7.     then sys.log.saveline(sqlcode,sqlerrm);
  8. end;
  9. /
查看logtab里的記錄

點擊(此處)折疊或打開

  1. select * from logtab;

  1.       CODE TEXT                           CREATED_O CREATE_BY CHANGE_ON CHANGE_BY
  2. ---------- ------------------------------ --------- ---------- --------- ----------
  3.        100 ORA-01403: no data found       10-JUN-18 SYS        10-JUN-18 SYS







向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI