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