ORACLE数据库PL/SQL编程之把过程与函数说透(1)(2)
例1、获取某部门的工资总和:
--获取某部门的工资总和
- CREATE OR REPLACEFUNCTION get_salary(
- Dept_no NUMBER,
- Emp_count OUT NUMBER)
- RETURN NUMBER IS V_sum NUMBER;BEGIN SELECT SUM(SALARY), count(*) INTO V_sum, emp_count
- FROM EMPLOYEES WHERE DEPARTMENT_ID=dept_no;
- RETURN v_sum;EXCEPTION
- WHEN NO_DATA_FOUND THEN
- DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');
- WHEN OTHERS THEN
- DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);END get_salary;
2. 函数的调用
函数声明时所定义的参数称为形式参数,应用程序调用时为函数传递的参数称为实际参数。应用程序在调用函数时,可以使用以下三种方法向函数传递参数:
第一种参数传递格式:位置表示法。
即在调用时按形参的排列顺序,依次写出实参的名称,而将形参与实参关联起来进行传递。用这种方法进行调用,形参与实参的名称是相互独立,没有关系,强调次序才是重要的。
格式为:argument_value1[,argument_value2 …]
例2:计算某部门的工资总和:
- DECLARE V_num NUMBER;
- V_sum NUMBER;BEGIN
- V_sum :=get_salary(10, v_num);
- DBMS_OUTPUT.PUT_LINE('部门号为:10的工资总和:'||v_sum||',人数为:'||v_num);END;
第二种参数传递格式:名称表示法。
即在调用时按形参的名称与实参的名称,写出实参对应的形参,而将形参与实参关联起来进行传递。这种方法,形参与实参的名称是相互独立的,没有关系,名称的对应关系才是最重要的,次序并不重要。
格式为: argument => parameter [,…]
其中:argument 为形式参数,它必须与函数定义时所声明的形式参数名称相同parameter 为实际参数。
在这种格式中,形势参数与实际参数成对出现,相互间关系唯一确定,所以参数的顺序可以任意排列。
例3:计算某部门的工资总和:
- DECLARE V_num NUMBER;
- V_sum NUMBER;BEGIN
- V_sum :=get_salary(emp_count => v_num, dept_no => 10);
- DBMS_OUTPUT.PUT_LINE('部门号为:10的工资总和:'||v_sum||',人数为:'||v_num);END;



