我必须只打印错误消息并删除代码号
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”,但包括在内可以让未来的维护者清楚地了解这里的意图,我认为这是最佳实践。
您可以使用下面的函数从 Oracle Apex 中删除 ora 代码。,
例如,如果你的函数如下
create or replace function test_error_uthaman
return varchar2
is
begin
raise_application_error(-20001,'test messge from cuntion');
end;
然后你可以使用下面的方法删除ora代码,你只会有错误消息而没有错误代码。
APEX_ERROR.GET_FIRST_ORA_ERROR_TEXT (
p_error in t_error,
p_include_error_no in boolean default false )
return varchar2;