oracle 自定义函数
函数
函数与存储过程相似,也是数据库中存储的已命名PL-SQL程序块。函数的主要特征是它必须有一个返回值。通过return来指定函数的返回类型。在函数的任何地方可以通过return expression语句从函数返回,返回类型必须和声明的返回类型一致。
语法:
create [or replace] function function_name [(parameter_list)] return datatype {is/as} [local_declarations] begin executable_statements; [exception exception_handlers;] end;
说明:
function_name:函数名称。
parameter_list:函数列表,可选。
return 自居:指定函数的返回类型,不能指定大小。
local_declarations:局部变量声明,可选。
executable_statements:要执行的PL-SQL语句。
exception_handlers:异常处理,可选。
or repalce:是否覆盖,可选。
例:根据员工编号获得员工薪水。
--根据no查询sal CREATE OR REPLACE FUNCTION fun_getSal(eno NUMBER) RETURN NUMBER --返回类型 AS v_sal emp.sal%TYPE; BEGIN SELECT sal INTO v_sal FROM emp WHERE empno = eno; RETURN v_sal; EXCEPTION WHEN OTHERS THEN raise_application_error(-20012,'该雇员不存在'); END fun_getSal;
调用函数:
--调用函数,自定义异常处理 DECLARE v_sal NUMBER; emp_20012 EXCEPTION; PRAGMA EXCEPTION_INIT(emp_20012,-20012); BEGIN v_sal:=fun_getsal(7788); dbms_output.put_line('sal:'||v_sal); EXCEPTION WHEN emp_20012 THEN dbms_output.put_line('该雇员不存在'); END;
注意:
1、函数参数和返回类型只声明参数,不指定大小。
2、可执行部分至少有一条return语句。
3、调用函数时,不能将函数作为单独的语句存在,可以作为表达式的一部分。
适用场合:
1、如果需要返回多个值和不返回值,就使用存储过程;如果只需要返回一个值,就使用函数。
2、存储过程一般用于执行一个指定的动作,函数一般用于计算和返回一个值。
3、可以再SQL内部调用函数来完成复杂的计算问题,但不能调用存储过程。