背景,由於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...