无法从PL/SQL中的过程中检索错误

Ada*_*gua 2 plsql exception procedure

我开始使用PL/SQL并学习如何编写procedures,exceptions但我似乎无法掌握如何显示错误.这个过程很简单,它只能做简单的数学运算,如下所示:

create or replace
procedure get_simple_math
  (n_num1 in number,
   n_num2 in number,
   n_answer out number,
   n_err_code out number,
   n_err_msg out varchar2)
as
begin
  n_answer := (n_num1 / n_num2);
  dbms_output.put_line('Answer is '||n_answer);

  n_err_code := 0;
exception
  when others
  then
    n_err_code := SQLCODE;
    n_err_msg := 'Error in get_simple_math '||SQLERRM;
    raise_application_error (-20002,n_err_msg);
end get_simple_math;
Run Code Online (Sandbox Code Playgroud)

正如你可以看到它没什么特别的,但我不能让我的生活得到block运行:

set serveroutput on
declare
  n_answer number := 0;
  n_err_code number;
  n_err_msg varchar2;
begin
  get_simple_math(10,5,n_answer);
end;
Run Code Online (Sandbox Code Playgroud)

我假设我需要声明设置的变量out,这就是为什么它们在那里.我也尝试将它们添加到procedure执行中:

get_simple_math(10,5,n_answer,n_err_code,n_err_msg);
Run Code Online (Sandbox Code Playgroud)

但这似乎没有诀窍,所以我只是在寻找解决这个问题的一些帮助.提前致谢.

Art*_*Art 5

运行这个,你会得到你的答案:

declare
  n_answer number := 0;
  n_err_code number;
  --> n_err_msg varchar2; -- Incorrect
  n_err_msg varchar2(300);     -- Correct
begin
  --> get_simple_math(10,5,n_answer); -- Incorrect call to proc...
  get_simple_math(10,5,n_answer, n_err_code, n_err_msg); -- add out parameters
end;
/
Run Code Online (Sandbox Code Playgroud)

程序部分的一般建议:使用substr - 可选:

  n_err_msg := 'Error in get_simple_math '||substr(SQLERRM, 1, 250);
Run Code Online (Sandbox Code Playgroud)