Oracle預存程序記錄異常,Oracle預存程序記錄

來源:互聯網
上載者:User

Oracle預存程序記錄異常,Oracle預存程序記錄

    對於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

相關文章

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.