oracle怎么获取exception信息
通过如下代码:
public static String getExceptionAllinformation(Exception ex){
String sOut = "";
StackTraceElement[] trace = ex.getStackTrace();
for (StackTraceElement s : trace) {
sOut += "\tat " + s + "\r\n";
}
return sOut;
}
扩展资料:
注意事项
oracle存储过程,可以通过sqlcode 获取异常编码、通过sqlerrm获取异常信息。
例子:
create or replace procedure write2blob(p_id in number, --id
p_blob_data in blob,
p_msg out varchar2) --数据
is
v_lobloc blob; --目标blob
v_blob_data blob; --作为接受参数的字段,参数变量不能直接拿来赋值
v_amount binary_integer; --总长度
v_sub_length binary_integer; --一次读取的最大长度,不超过32766
v_sub_blob blob; --一次读取的子串
v_offset binary_integer; --游标
v_err_msg varchar2(1000);
v_id binary_integer; --要修改或新增的记录ID
v_temp binary_integer; --临时变量用于判断是否有v_id对应的记录begin
v_amount := length(p_blob_data);
v_blob_data := p_blob_data;
v_sub_length := 32767;
v_offset := 1;
v_id := p_id;
v_temp := 0; --execute immediate v_query_string into v_lobloc;
select count(1) into v_temp from a where id = v_id; --查询是否有v_id对应的记录,并且赋值给v_te/*注意:无论是修改还是新增,blob字段都需要用empty_blob()进行初始化,否则后边的blob内容,不能写进表里面。
推荐于2018-02-28 · 知道合伙人软件行家
--2.通过sqlcode , sqlerrm 这两个内置变量来查看,例如:
DECLARE
--声明异常
some_kinds_of_err EXCEPTION; -- Exception to indicate an error condition
v_ErrorCode NUMBER; -- Variable to hold the error message code
v_ErrorText VARCHAR2(200); -- Variable to hold the error message text
BEGIN
--...
--抛出异常
IF ( ... ) THEN --(括号内填抛出异常的条件)
RAISE some_kinds_of_err;
END IF;
--...
EXCEPTION
--捕捉异常
WHEN some_kinds_of_err THEN
/* do something to Handler the errors */
null;
--捕捉其他异常,并获得 捕获异常的内容
WHEN OTHERS THEN
v_ErrorCode := SQLCODE;
v_ErrorText := SUBSTR(SQLERRM, 1, 200);
-- Note the use of SUBSTR here.
dbms_output.put_line(v_ErrorCode || '::'||v_ErrorText);
END;
/**
sqlcode 就是错误代码
sqlerrm 就是sql错误信息。注意用substr来截取,否则输出很难看。
**/
通过dbms_utility.format_error_backtack获取异常信息输出错误信息:
CREATE OR REPLACE PROCEDURE ndf_exception AS
------------------------------------------
--Date:
--Author:阿金-jean
--Description: NO_DATA_FOUND FOR Practice ORACLE EXCEPTION
------------------------------------------
v_sqlcode NUMBER(10);
v_sqlerr VARCHAR2(500);
v_backtrace VARCHAR2(500);
BEGIN
dbms_output.put_line('OUTPUT EXCEPTION INFOS:');
RAISE no_data_found;
EXCEPTION
WHEN no_data_found THEN
--获取异常信息
v_sqlcode := SQLCODE;
v_sqlerr := SQLERRM;
v_backtrace := dbms_utility.format_error_backtrace;
dbms_output.put_line(' SQLCODE >> ' || v_sqlcode || chr(13) ||
' SQLERRM >> ' || v_sqlerr || chr(13) ||
' BACKTRACE >> ' || v_backtrace);
WHEN OTHERS THEN
NULL;
END;
DECLARE
------------------------------------------
--Date:
--Author:
--Description:测试块
------------------------------------------
BEGIN
ndf_exception;
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
下面是获取backtrace的结果:
OUTPUT EXCEPTION INFOS:
SQLCODE >> 100
SQLERRM >> ORA-01403: 未找到任何数据
BACKTRACE >> ORA-06512: 在 "ENDS3.NDF_EXCEPTION", line 13
从上面可以看出输出的错误信息,通过获取dbms_utility的format_error_strace和format_error_backtrace都可以获取到异常的异常的堆栈信息,但2这有稍微的差别:
BACKTRACE >> ORA-06512: 在 "ENDS3.NDF_EXCEPTION", line 13
STRACK >> ORA-01403: 未找到任何数据
注:这里是直接使用raise no_data_found抛出异常,因此strack的错误信息和SQLERRM一样,如果实在程序中应该是类似于这种:ORA-06512: at line 13
2013-09-23
2013-09-23