请教各位高手 oracle 存储过程 如何将获得捕获异常的内容写入一张表里?

浏览:1161 回答:2

请教各位高手 oracle 存储过程 如何将获得捕获异常的内容写入一张表里
例如  DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));
将SUBSTR(SQLERRM, 1, 200)写人
insert into t_log_error values('1','2','3',SUBSTR(SQLERRM, 1, 200),'%$%&',sysdate);
是不是没法实现啊。

create or replace procedure p_testone is
 v number(2);
 
begin
 select 1 / 0 into v from dual;
insert into t_log_error values('1','2','3',SUBSTR(SQLERRM, 1, 200),'%$%&',sysdate);
 --异常处理
 EXCEPTION WHEN OTHERS THEN ROLLBACK;
 DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));
end;
收起

存储过程编译都没过去


邀请回答 我来回答

全部回答

(2)
默认 最新
疯狂的玩具

可以先定义个变量,发生异常的时候将异常信息赋值给变量,插入表的时候用变量,

日志表没给表结构,我自己重新定义了一个,测试ok。

CREATE TABLE T_LOG_ERROR

(ERR_ID NUMBER,

ERR_TIME   DATE,

ERR_CODE   NUMBER,

ERR_INFOR  VARCHAR2(4000)

);


create or replace procedure p_testone is

  v number(2);

  v_sqlcode number;

  v_sqlerrm varchar2(4000);

begin

  select 1 / 0 into v from dual;


  --异常处理

  EXCEPTION WHEN OTHERS THEN 

    ROLLBACK;

    v_sqlcode :=sqlcode;

    v_sqlerrm :=SUBSTR(sqlerrm, 1, 2000);

  insert into t_log_error values(1,sysdate,v_sqlcode,v_sqlerrm);

  commit;

  DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));

end;


执行存储过程后就可以把异常信息记录到表t_log_error了。


2017年10月23日
已采纳 评论 点赞
疯狂的玩具
可以先定义个变量,发生异常的时候将异常信息赋值给变量,插入表的时候用变量,





日志表没给表结构,我自己重新定义了一个,测试ok。





CREATE TABLE T_LOG_ERROR





(ERR_ID NUMBER,





ERR_TIME   DATE,





ERR_CODE   NUMBER,





ERR_INFOR  VARCHAR2(4000)





);












create or replace procedure p_testone is





  v number(2);





  v_sqlcode number;





  v_sqlerrm varchar2(4000);





begin





  select 1 / 0 into v from dual;












  --异常处理





  EXCEPTION WHEN OTHERS THEN 





    ROLLBACK;





    v_sqlcode :=sqlcode;





    v_sqlerrm :=SUBSTR(sqlerrm, 1, 2000);





  insert into t_log_error values(1,sysdate,v_sqlcode,v_sqlerrm);





  commit;





  DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM, 1, 200));





end;












执行存储过程后就可以把异常信息记录到表t_log_error了。






2017年10月23日
评论 点赞

没解决?试试专家一对一服务

换一批