如何删除错误代码并仅打印消息 | PLSQL

问题描述 投票:0回答:3

我必须只打印错误消息并删除代码号

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
plsql oracle-apex
3个回答
1
投票

你需要使用这样的东西 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;
/

0
投票

您也可以将 REPLACE 调用更改为 REGEXP_REPLACE,因为您似乎正在尝试使用正则表达式来匹配错误:

:MSG := REGEXP_REPLACE(SQLERRM,'^ORA-[0-9]+: ', NULL);

在行开头匹配“ORA-”模式,后跟 1 或数字,然后是冒号,后跟空格并替换为 NULL。

请注意,从技术上讲,此调用中不需要“, NULL”,但包括在内可以让未来的维护者清楚地了解这里的意图,我认为这是最佳实践。


0
投票

您可以使用下面的函数从 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;
© www.soinside.com 2019 - 2024. All rights reserved.