理论上有人问过我这个问题:您想创建一个 PL/SQL 代码块来计算客户订单的折扣。此代码将从多个地方调用,但仅在程序单元 ORDERTOTAL 内调用。存储计算折扣的代码的最合适位置是什么。
我回答“程序单元 ORDERTOTAL 主体中的一段代码”。这是不正确的。正确的一个是“在程序单元 ORDERTOTAL 中定义的本地子程序”。为什么会这样?我认为这个 ORDERTOTAL 本身就是一个子程序(过程/函数),事实并非如此。
理论上有人问过我这个问题:您想创建一个 PL/SQL 代码块来计算客户订单的折扣。此代码将从多个地方调用,但仅在程序单元 ORDERTOTAL 内调用。存储计算折扣的代码的最合适位置是什么。
我回答“程序单元 ORDERTOTAL 主体中的一段代码”。这是不正确的。正确的一个是“在程序单元 ORDERTOTAL 中定义的本地子程序”。为什么会这样?我认为这个 ORDERTOTAL 本身就是一个子程序(过程/函数),事实并非如此。
“在程序单元 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;
/
从而避免代码重复。