0

この質問は理論的に私に尋ねられました。顧客の注文の割引を計算するコードのPL/SQLブロックを作成したいとします。このコードはいくつかの場所から呼び出されますが、プログラムユニットORDERTOTAL内でのみ呼び出されます。割引を計算するコードを保存するのに最も適切な場所はどこですか。

「プログラムユニットORDERTOTAL本体のコードブロック」と答えました。これは正しくありません。正解は「プログラム単位ORDERTOTAL内で定義されたローカルサブプログラム」です。なんでそうなの?このORDERTOTAL自体がサブプログラム(プロシージャ/関数)だと思いましたが、そうではありません。

4

1 に答える 1

1

「プログラムユニットORDERTOTAL内で定義されたローカルサブプログラム」は、質問が「このコードはいくつかの場所から呼び出される」と述べたので正しいです。言い換えれば、私たちは次のようなユニットを持っています

create function foo
  return number
is
  v_one number := 200;
  v_two number := 10;
begin

  v_one := some complex math operation;

  -- some other code

  v_two := the same complex math operation;

  -- etc..
end;
/

したがって、その数学演算の繰り返しを節約するために(これはあなたが与えた解決策です..関数自体のコードのブロックであり、必要に応じて繰り返されます)、これを行うことができます:

create function foo
  return number
is
  v_one number := 200;
  v_two number := 10;

  function calc_math(p_var number)
    return number
  is
  begin
    return complex math operation;
  end calc_math;
begin

  v_one := calc_math(v_one);

  -- some other code

  v_two := calc_math(v_two);

  -- etc..
end;
/

したがって、コードの繰り返しを回避できます。

于 2013-03-26T15:02:25.147 に答える