PLSQL Language Reference-PL/SQL子程式-子程式引數-實參的位置、名稱和混合標記

LuiseDalian發表於2014-03-30

0.1.1 實參的位置、名稱和混合標記

在呼叫子程式時,可以使用位置名稱混合標記來指定實參。

位置

名稱

混合

按形參宣告的順序指定實參

可以按任何順序指定實參

formal => actual

以位置標記開始,對其它引數使用名稱標記

可以省略尾部的可選引數

可以省略任何可選引數

在位置標記中可以省略尾部的可選引數,在名稱標記中可以省略任何可選引數

如果按錯誤的順序指定了實參,尤其是實參為字面量,則會引起很難發現的問題

實參沒有錯誤的順序

在位置標記中,如果按錯誤的順序指定了實參,尤其是實參為字面量,則會引起很難發現的問題

如果形參列表改變了,則子程式呼叫必須改變,除非列表中只是增加了新的尾部可選引數。

只有當引數列表增加了新的引數時,子程式呼叫才需要改變。

對於形參列表的改變,可能需要改變位置標記

 

當呼叫由它人定義或維護的子程式時,建議採用這種方式

當呼叫有必須引數和可選引數的子程式,且必須指定少數的幾個可選引數的時候,很方便。

 

DECLARE

    emp_num NUMBER(6) := 120;

    bonus   NUMBER(6) := 50;

 

    PROCEDURE raise_salary (

        emp_id NUMBER,

        amount NUMBER)

    IS

    BEGIN

        UPDATE employees

        SET salary = salary + amount

        WHERE employee_id = emp_id;

    END raise_salary;

 

BEGIN

    -- 等效的呼叫

    raise_salary(emp_num, bonus);                      -- 按位置

    raise_salary(amount => bonus, emp_id => emp_num);  -- 按名稱

    raise_salary(emp_id => emp_num, amount => bonus);  -- 按名稱

    raise_salary(emp_num, amount => bonus);            -- 混合

END;

/

 

CREATE OR REPLACE FUNCTION compute_bonus (

    emp_id NUMBER,

    bonus NUMBER )   RETURN NUMBER

IS

    emp_sal NUMBER;

BEGIN

    SELECT salary INTO emp_sal

    FROM employees

    WHERE employee_id = emp_id;

 

    RETURN emp_sal + bonus;

END compute_bonus;

/

SELECT compute_bonus(120, 50) FROM DUAL;                    -- 按位置

SELECT compute_bonus(bonus => 50, emp_id => 120) FROM DUAL; -- 按名稱

SELECT compute_bonus(120, bonus => 50) FROM DUAL;           -- 混合

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1132818/,如需轉載,請註明出處,否則將追究法律責任。

相關文章