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 回答