ORACLE儲存優雅的記錄日誌

2021-10-02 06:18:12 字數 4833 閱讀 3503

​ 背景,由於lz的工作中有較多的業務邏輯是通過儲存過程實現的,在儲存過程中的具體執行過程沒有log記錄,出現問題後的排查照成了很大的困擾,經過請教前輩得到下來解決辦法,特此記錄下防止遺忘,同時也分享給有相同業務場景的夥伴相互學習。

--操作日誌表

create

table tb_handle_log(

serialkey number,

oper_id nvarchar2(50)

default sys_guid(),

title nvarchar2(50)

,action nvarchar2(

100)

, method nvarchar2(

100)

, oper_name nvarchar2(50)

, oper_param clob,

status nvarchar2(2)

default

's',

error_msg clob default'',

oper_time date

default sysdate,

adddate date

default sysdate,

addwho nvarchar2 (30)

default

user);

comment

ontable tb_handle_log is

'操作日誌表'

;comment

oncolumn tb_handle_log.oper_id is

'日誌主鍵'

;comment

oncolumn tb_handle_log.title is

'模組標題'

;comment

oncolumn tb_handle_log.

action

is'功能請求'

;comment

oncolumn tb_handle_log.method is

'請求方法'

;comment

oncolumn tb_handle_log.oper_name is

'操作人員'

;comment

oncolumn tb_handle_log.oper_param is

'請求引數'

;comment

oncolumn tb_handle_log.

status

is'操作狀態(s正常 e異常)'

;comment

oncolumn tb_handle_log.error_msg is

'錯誤訊息'

;comment

oncolumn tb_handle_log.oper_time is

'操作時間'

;--create sequence

create sequence seq_tb_handle_log

minvalue 1

maxvalue 99999999999999

start

with

1increment by1;

/--create trigger

create

orreplace

trigger tri_tb_handle_log

before insert

on tb_handle_log

for each row

declare

begin

if :new.serialkey is

null

then

select seq_tb_handle_log.nextval into :new.serialkey from dual;

endif

;end

;/

create

orreplace package handle_log is

/*created on 2020/01/17 by jackdong*/

/*儲存過程記錄日誌*/

/*記錄訊息*/

procedure info(title nvarchar2,

action nvarchar2,method nvarchar2,oper_name nvarchar2,

oper_param nvarchar2,error_msg nvarchar2)

;/*記錄錯誤*/

procedure error(title nvarchar2,

action nvarchar2,method nvarchar2,oper_name nvarchar2,

oper_param nvarchar2,error_msg nvarchar2)

;end handle_log;

/create

orreplace package body handle_log is

/*created on 2020/01/17 by jackdong*/

/*儲存過程記錄日誌*/

/*記錄訊息*/

procedure info(title nvarchar2,

action nvarchar2,method nvarchar2,oper_name nvarchar2,

oper_param nvarchar2,error_msg nvarchar2)

is pragma autonomous_transaction;

begin

insert

into tb_handle_log(title,

action

,method,oper_name,oper_param,

status

,error_msg,addwho)

values

(title,

action

,method,oper_name,oper_param,

's',error_msg,oper_name)

;commit

; exception when others then

null

;rollback

;end

;/*記錄錯誤*/

procedure error(title nvarchar2,

action nvarchar2,method nvarchar2,oper_name nvarchar2,

oper_param nvarchar2,error_msg nvarchar2)

is pragma autonomous_transaction;

begin

insert

into tb_handle_log(title,

action

,method,oper_name,oper_param,

status

,error_msg,addwho)

values

(title,

action

,method,oper_name,oper_param,

'e',error_msg,oper_name)

;commit

; exception when others then

null

;rollback

;end

;end handle_log;

/

declare

job number;

begin

sys.dbms_job.submit(job,

'/*作業任務,刪除一年前的info和debug型別的日誌,防止表資料過大*/

delete tb_handle_log where adddate < add_months(sysdate ,-12);

commit;'

, sysdate,

'add_months(trunc(sysdate,'

'yyyy'

'),12)+1/24');

commit

;end

;/

-- created on 2020/1/17 by jack 

declare

-- local variables here

v_title nvarchar2(

10):=

'使用者登陸'

; v_action nvarchar2(

100):=

'驗證密碼'

; v_method nvarchar2(

100):=

'***xx'

; v_oper_param nvarchar2(

255):=

'user:jack'

; v_who nvarchar2(

10):=

'jack'

;begin

-- test statements here

handle_log.info(v_title,v_action,v_method,v_who,v_oper_param,

'使用者登陸成功!');

handle_log.error(v_title,v_action,v_method,v_who,v_oper_param,

'使用者登陸失敗!');

end;

日誌檢視 優雅的檢視log日誌

前言 作為一名測試工程師,測試任務中和linux打交道的地方有很多,比如檢視日誌 定位bug 修改檔案 部署環境等。產品部署在linux上,如果某個功能發生錯誤,就需要我們去排查出錯的原因,所以熟練的掌握檢視log的方法顯得尤為重要。如何優雅的檢視log日誌,讓我們拭目以待。談到檢視log的方法,最...

Oracle 寫儲存過程的記錄(一)

1當select a into b,a為空的時候該怎麼處理。2以及游標返回查詢到的結果 3 當查詢輸入的查詢條件為空時,查詢所有 procedure procdure id in number backcontent out sys refcursor isv name varchar2 30 be...

oracle儲存過程輸出多行記錄

今天oracle上機實驗。作業題目要求 顯示所有學生學號和姓名。type,rowtype都只能讀出一行記錄。但是游標可以讀多行。cursor select into v record from s declare cursor l c is select sno,sname from s begin...