PLSQL中如何去除错误代码仅打印错误信息
PL/SQL 实现仅输出错误信息(去除错误代码编号)
需求为捕获异常后仅保留错误信息文本,去除开头的ORA-格式错误代码编号。现有PL/SQL代码存在语法及功能缺陷,以下是修正方案:
原代码
BEGIN IF :MY_TEXT is null THEN raise_application_error(-20001,'Text field cannot be empty') END IF; Exception when others then :MSG := replace(SQLERRM,'^ORA-+:',''); END;
问题分析
raise_application_error语句末尾缺少分号,存在语法错误- PL/SQL的
replace函数不支持正则表达式,无法精准匹配并去除ORA-XXXX:格式的错误代码前缀
修正后的代码
BEGIN IF :MY_TEXT IS NULL THEN raise_application_error(-20001, 'Text field cannot be empty'); END IF; EXCEPTION WHEN OTHERS THEN :MSG := regexp_replace(SQLERRM, '^ORA-\d+:\s*', ''); END;
修正说明
- 补全
raise_application_error语句末尾的分号,修复语法错误 - 使用
regexp_replace替代replace,通过正则表达式^ORA-\d+:\s*匹配并移除错误代码前缀:^ORA-\d+:匹配以ORA-开头、后跟数字和冒号的错误代码部分\s*匹配前缀后的任意空格,确保错误信息文本无多余前置空格
预期效果
当:MY_TEXT为空时,:MSG将被赋值为Text field cannot be empty,仅保留纯错误信息文本,符合需求。
内容的提问来源于stack exchange,提问作者yyy62103
相关产品推荐
相关产品推荐

