3、EATE [OR REPLACE] FUNCTION function_name (arg1 [ { IN
4、 OUT
5、 IN OUT }] type1 [DEFAULT value1], [arg2 [ { IN
6、 OUT
7、 IN OUT }] type2 [DEFAULT value1]], ...... [argn [ { IN
8、 OUT
9、 IN OUT }] typen [DEFAULT valuen]]) [ AUTHID DEFINER
10、 CURRENT_USER ]RET
11、URN return_type IS
12、 AS <类型.变量的声明部分> BEGIN 执行部分 RETURN expressionEXCEPTION 异常处理部分END function_name; l IN,OUT,INOUT是形参的模式。若省略,则为IN模式。IN模式的形参只能将实参传递给形参,进入函数内部,但只能读不能写,函数返回时实参的值不变。OUT模式的形参会忽略调用时的实参值(或说该形参的初始值总是NULL),但在函数内部可以被读或写,函数返回
13、时形参的值会赋予给实参。INOUT具有前两种模式的特性,即调用时,实参的值总是传递给形参,结束时,形参的值传递给实参。调用时,对于IN模式的实参可以是常量或变量,但对于OUT和INOUT模式的实参必须是变量。 l 一般,只有在确认function_name函数是新函数或是要更新的函数时,才使用ORREPALCE关键字,否则容易删除有用的函数。 例1. 获取某部门的工资总和: --获取某部门的工资总和CREATE OR REPLACEFUNCTION get_sala
14、ry( Dept_no NUMBER, Emp_count OUT NUMBER) RETURN NUMBER IS V_sum NUMBER;BEGIN-17- 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_OUTPU
15、T.PUT_LINE('你需要的数据不存在!'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLCODE