如何在Oracle APEX中提取raise_application_error的纯错误信息
解决Oracle APEX中仅显示raise_application_error纯错误信息的方法
方法一:全局应用级错误处理(推荐)
在APEX应用中统一处理所有自定义ORA-20xxx错误:
- 进入应用的共享组件 → 错误处理
- 新建或编辑错误处理规则,设置错误代码范围为
-20999到-20000 - 选择错误处理类型为「PL/SQL代码」,粘贴以下代码:
DECLARE l_error_msg VARCHAR2(4000); BEGIN l_error_msg := REGEXP_REPLACE(SQLERRM, 'ORA-\d+:\s*''?(.*)''?', '\1'); apex_error.add_error( p_message => l_error_msg, p_display_location => apex_error.c_inline_in_notification ); apex_error.handle_error; END;
这段代码会自动去掉ORA错误码前缀,只保留纯错误信息并在页面内通知显示。
方法二:页面级PL/SQL处理中捕获错误
如果只需要在特定页面处理错误,可在调用API的PL/SQL块中添加异常捕获:
BEGIN -- 调用你的业务API your_api.your_procedure(p_param1 => :P1_PARAM, ...); EXCEPTION WHEN OTHERS THEN IF SQLCODE BETWEEN -20999 AND -20000 THEN apex_error.add_error( p_message => REGEXP_REPLACE(SQLERRM, 'ORA-\d+:\s*''?(.*)''?', '\1'), p_display_location => apex_error.c_inline_in_notification ); ELSE -- 非自定义错误按默认逻辑抛出 RAISE; END IF; END;
关键说明
REGEXP_REPLACE 函数会匹配「ORA-数字:」开头的前缀,提取后续的纯错误内容,不管原信息是否带单引号都能正确处理。
内容的提问来源于stack exchange,提问作者abi
相关产品推荐
相关产品推荐

