存储计算折扣的代码的位置

时间:2013-03-26 11:19:04

标签: plsql

这个问题在理论上问我: 您想要创建一个PL / SQL代码块来计算客户订单的折扣。此代码将从多个位置调用,但仅在程序单元ORDERTOTAL中调用。存储计算折扣的代码的最合适位置是什么。

我回答了“程序单元ORDERTOTAL正文中的一段代码”。这是不正确的。 正确的是“在程序单元ORDERTOTAL中定义的本地子程序”。为什么会这样? 我认为这个ORDERTOTAL本身就是一个子程序(程序/功能),但事实并非如此。

1 个答案:

答案 0 :(得分: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;
/

因此避免了代码重复。