我必须只打印错误消息并删除代码号
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;
预期输出:
Text filed cannot be empty
您需要使用类似的东西SUBSTR(MSG,INSTR(MSG(':',1,1(+2(
DECLARE
MY_TEXT VARCHAR2(100);
MSG VARCHAR2(100);
BEGIN
IF MY_TEXT is null THEN
raise_application_error(-20001,'Text field cannot be empty');
END IF;
Exception
when others then
MSG := SQLERRM ;
dbms_output.put_line( SUBSTR(MSG, INSTR(MSG, ':', 1, 1)+2 ) );
END;
/
您也可以将REPLACE调用更改为REGEXP_REPLACE,因为您似乎试图使用正则表达式来匹配错误:
:MSG := REGEXP_REPLACE(SQLERRM,'^ORA-[0-9]+: ', NULL);
在行首匹配一个模式"ORA-",后跟1或数字,然后是一个冒号,后跟一个空格,并替换为NULL。
请注意,从技术上讲,这个调用中不需要",NULL",但include向未来的维护人员表明了这里的意图,我认为这将是最佳实践。