oracle捕获并抛出异常
2018-12-13 本文已影响7人
清_晨_
写一个测试用例,用存储过程捕获异常并抛出异常,定位异常信息。
1.新建一张表
create table cqh_log (
p_error VARCHAR2(3000),
p_sqlerrm VARCHAR2(3000),
p_time VARCHAR2(1000)
)
2.新新建一个测试的存储过程
create or replace procedure testprc IS
V_NO VARCHAR2(1);
v_err_msg VARCHAR2(1000); ---错误信息
p_error VARCHAR2(1000); --错误行
error_code VARCHAR2(1000); --错误代码
BEGIN
select 'NUMBER' into V_NO from dual;
exception
when others then
v_err_msg := SUBSTR(SQLERRM, 1, 512); --错误信息
p_error := dbms_utility.format_error_backtrace(); --错误行
error_code := sqlcode;
insert into cqh_log
(p_error,p_sqlerrm,p_time,p_sqlcode)
values (p_error,v_err_msg, to_char(sysdate, 'YYYY-MM-DD HH:MI:SS'),error_code);
commit;
end testprc;
调用此过程后,会报ORA-06502这个错误,错误信息如下:ORA-06502: PL/SQL: numeric or value error: character string buffer too small,最后我们可以在日志表中看到错误定位的行:ORA-06512: at "SYSTEM.TESTPRC", line 7说明过程的第7行报错了。
错误信息如下: