2

PL/SQL を使い始めて、書き方を学んでいますproceduresexceptions、エラーを表示する方法がわかりません。手順は単純なもので、以下に示すように単純な計算のみを行うことになっています。

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;

ご覧のとおり、何も派手ではありませんが、私は一生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;

に設定されている変数を宣言する必要があると想定しているoutため、そこに存在します。また、次のように実行に追加しようとしましたprocedure

get_simple_math(10,5,n_answer,n_err_code,n_err_msg);

しかし、それはうまくいかないようだったので、この問題を解決するための助けを探しています. 前もって感謝します。

4

1 に答える 1

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;
/

プロシージャ部分の一般的な提案: substr を使用 - オプション:

  n_err_msg := 'Error in get_simple_math '||substr(SQLERRM, 1, 250);
于 2013-01-09T19:28:42.420 に答える