Oracle預存程序記錄異常

來源:互聯網
上載者:User

標籤:style   io   ar   color   sp   for   strong   on   art   

    對於Oracle的預存程序,拋出異常可以拋向代碼或是用表記錄。如果你的系統應用有很多節點,像我們40個節點,如果拋錯拋到代碼裡面,錯誤根本就無法找到,最好是錯誤用表記錄。記錄錯誤的這個功能最好是通用的。

--建立錯誤記錄檔表

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 ‘報錯的具體行‘;

--表主鍵的序列

create sequence SEQ_RECORD_PROC_ERR
minvalue 1
maxvalue 9999999999999999999999999999
start with 21
increment by 1
cache 20;

--通用記錄錯誤預存程序

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;

--進行測試

create or replace procedure test_p1 is
begin
  execute IMMEDIATE ‘select from test‘;
 exception 
  when others then 
   record_proc_err_log(‘模組名‘,‘test_p1‘,SQLCODE,SQLERRM,
    substr(dbms_utility.format_error_backtrace, 1, 400));

end test_p1;

SQL> col proc_name  format a8;
SQL> col err_time  format a10;
SQL> col sql_code  format a5;
SQL> col SQL_ERRM  format a22;
SQL> col ERR_CONTENT  format a42;
SQL> select proc_name,err_time,sql_code,SQL_ERRM,ERR_CONTENT from pub_proc_err_log;
PROC_NAM ERR_TIME   SQL_C SQL_ERRM               ERR_CONTENT
-------- ---------- ----- ---------------------- ------------------------------------------
test_p1  08-12月-14 -936  ORA-00936: 缺失運算式  ORA-06512: 在 "LCAM_TEST.TEST_P1", line 3

Oracle預存程序記錄異常

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.