oracle 存儲過程最好的記錄錯誤方式(轉(zhuǎn))

 當你的應(yīng)用有調(diào)用存儲過程,而節(jié)點有幾十個或者上百個,
找錯是不是一個很麻煩的事情,這個時候,我建議寫到[數(shù)據(jù)庫]
1. 建立錯誤日志記錄表

drop table PUB_PROC_ERR_LOG purge;

create table PUB_PROC_ERR_LOG
(
  LOG_ID      NUMBER,
  MODULE_NAME VARCHAR2(100),
  PROC_NAME   VARCHAR2(100),
  ERR_TIME    DATE,
  SQL_CODE    VARCHAR2(50),
  SQL_ERRM    VARCHAR2(100),
  ERR_CONTENT VARCHAR2(500)
);
comment on column PUB_PROC_ERR_LOG.LOG_ID is '主鍵';
comment on column PUB_PROC_ERR_LOG.MODULE_NAME  is '模塊名稱';
comment on column PUB_PROC_ERR_LOG.PROC_NAME  is '存儲過程名稱';
comment on column PUB_PROC_ERR_LOG.ERR_TIME  is '報錯時間';
comment on column PUB_PROC_ERR_LOG.SQL_CODE  is 'SQLCODE';
comment on column PUB_PROC_ERR_LOG.SQL_ERRM  is 'SQLERRM';
comment on column PUB_PROC_ERR_LOG.ERR_CONTENT  is '報錯的具體行';
2. 表主鍵的序列
create sequence SEQ_RECORD_PROC_ERR
minvalue 1
maxvalue 9999999999999999999999999999
start with 21
increment by 1
cache 20;
3.通用記錄錯誤存儲過程,用自治事務(wù)
CREATE OR REPLACE PROCEDURE 
record_proc_err_log(module_name varchar2,
                proc_name   varchar2,
                v_SQLCODE   varchar2,
                v_SQLERRM   varchar2,
                v_err_line  varchar2) is
  PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
  insert into pub_proc_err_log
    (log_id,
     module_name,
     proc_name,
     err_time,
     sql_code,
     sql_errm,
     err_content)
  values
(seq_record_proc_err.nextval,
     module_name,
     proc_name,
     sysdate,
     v_SQLCODE,
     v_SQLERRM,
     v_err_line);
  commit;
END record_proc_err_log;
4.測試一下
CREATE OR REPLACE PROCEDURE proce_test
is
BEGIN
  EXECUTE IMMEDIATE 'delete from test2 where';
 Exception
  WHEN OTHERS Then
    record_proc_err_log('模塊名','proce_test()',SQLCODE,SQLERRM,
    substr(dbms_utility.format_error_backtrace, 1, 400));
    --raise; 如果是java代碼調(diào)用存儲過程,則需要寫這一段,讓存儲過程錯誤上拋
END proce_test;

SQL> exec proce_test();
BEGIN proce_test(); END;
第 1 行出現(xiàn)錯誤:
ORA-00936: 缺失表達式
ORA-06512: 在 "LCAMTEST.PROCE_TEST", line 9
ORA-06512: 在 line 1
SQL> select * from pub_proc_err_log;
 LOG_ID  MODULE_NAME  PROC_NAME    ERR_TIME   SQL_CODE  SQL_ERRM          ERR_CONTENT
    10     模塊名   proce_test()  04-8月 -15   -936     
ORA-00936: 缺失表達式   ORA-06512: 在 "LCAMTEST.PROCE_TEST", line 4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容