ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Reference-PL/SQL子程序-子程序参数-实参的位置、名称和混合标记

PLSQL Language Reference-PL/SQL子程序-子程序参数-实参的位置、名称和混合标记

原创 Oracle 作者:LuiseDalian 时间:2014-03-30 21:15:23 0 删除 编辑

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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5569787