2013-03-26 73 views
0

理論上向我提出了這個問題: 您希望創建計算客戶訂單折扣的PL/SQL代碼塊。該代碼將從幾個地方調用,但僅在程序單元ORDERTOTAL內調用。存儲計算折扣的代碼的最適合的位置是什麼?存儲計算折扣的代碼的位置

我回答了「程序單元ORDERTOTAL主體中的一段代碼」。這是不正確的。 正確的是「程序單元ORDERTOTAL中定義的本地子程序」。爲什麼這樣? 我認爲這個ORDERTOTAL本身就是一個子程序(程序/函數),事實並非如此。

+0

過程或函數可以有其自己的本地過程和函數。 – 2013-03-26 12:12:42

回答

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; 
/

所以單元保存重複的是數學運算(這是溶液你的在函數本身碼gave..a塊,根據需要重複),我們可以這樣做:

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; 
/

因此避免代碼重複。