Scr*_*Dev 6 oracle plsql exception raise
我有一个问题,当我捕获异常时,原始堆栈跟踪丢失,然后提高它.
SUBSTR(SQLERRM || chr(10) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE(), 1, 3999)DECLARE
BEGIN
DECLARE
lv_val VARCHAR2(1);
BEGIN
SELECT dummy INTO lv_val -- Line# 6 (desired)
FROM dual
WHERE dummy = 'FFF';
EXCEPTION
WHEN OTHERS THEN
--DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM || chr(10) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE(), 1, 3999));
RAISE; -- Line# 12 (actual)
END;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM || chr(10) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE(), 1, 3999));
END;
/
Run Code Online (Sandbox Code Playgroud)
原始异常的行号(步骤1).
ORA-01403: no data found
ORA-06512: at line 6
Run Code Online (Sandbox Code Playgroud)
要么
ORA-01403: no data found
ORA-06512: at line 12
Caused By:
ORA-01403: no data found
ORA-06512: at line 6
Run Code Online (Sandbox Code Playgroud)
RAISE的行号(步骤4).
ORA-01403: no data found
ORA-06512: at line 12
Run Code Online (Sandbox Code Playgroud)
SQLERRM || chr(10) || DBMS_UTILITY.FORMAT_ERROR_STACK()ORA-01403: no data found
ORA-01403: no data found
Run Code Online (Sandbox Code Playgroud)
SQLERRM || chr(10) || DBMS_UTILITY.FORMAT_CALL_STACK()ORA-01403: no data found
----- PL/SQL Call Stack -----
object line object
handle number name
0xee1cbd68 18 anonymous block
Run Code Online (Sandbox Code Playgroud)
在内部异常处理程序中,不要RAISE使用RAISE_APPLICATION_ERROR过程,而使用将dbms_utility.format_error_backtrace函数结果传递给它的过程以获取原始行号:
BEGIN
DECLARE
lv_val VARCHAR2(1);
BEGIN
SELECT dummy INTO lv_val -- Line# 6 (desired)
FROM dual
WHERE dummy = 'FFF';
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20001, dbms_utility.format_error_backtrace,true);
END;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SUBSTR(SQLERRM || chr(10) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE(), 1, 3999));
END;
/
Run Code Online (Sandbox Code Playgroud)
没有外部异常处理程序,您将获得以下错误报告:
Error report -
ORA-20001: ORA-06512: at line 5
ORA-06512: at line 10
ORA-01403: no data found
Run Code Online (Sandbox Code Playgroud)
使用外部异常处理程序,您将获得以下内容:
ORA-20001: ORA-06512: at line 5
ORA-01403: no data found
ORA-06512: at line 10
Run Code Online (Sandbox Code Playgroud)
消息顺序略有不同,但是信息仍然存在。
| 归档时间: |
|
| 查看次数: |
2241 次 |
| 最近记录: |