基本语法如下所示
CREATE OR REPLACE FUNCTION <function_name> [(<parameters>)] RETURN <datatype> IS [declare section] BEGIN [<statement(s)>] RETURN <expression>; [EXCEPTION <exception handler(s);] END [<function_name>];
从上面的格式可以看出:
1)Function必须要有一个名字<function_name>;
2)可能有一个或多个参数;
3)必须指定返回值的类型<datatype>;
4)函数体用关键字BEGIN和END包含,必须要有RETURN返回值;
一些简单的例子
1、一个获取名字的函数,直接返回字符串
CREATE OR REPLACE FUNCTION fun_getMyName RETURN varchar2 is BEGIN RETURN 'Luxh'; END;
调用:
select fun_getMyName from dual; --或者 select fun_getMyName() from dual;
2、给定雇员ID,从雇员表中计算税收和保险的扣除函数。这个函数包含一个参数、一个本地变量描述和异常处理。
CREATE OR REPLACE FUNCTION fun_deductions(emp_id NUMBER)--emp_id接收输入参数 RETURN NUMBER IS total_deductions NUMBER;--定义返回的变量 BEGIN SELECT tax + insurance--查出需要的数据 INTO total_deductions--赋值给变量total_deductions FROM emp where id = emp_id; RETURN total_deductions;--返回结果 EXCEPTION WHEN no_data_found THEN--找不到数据异常 RETURN 0; WHEN OTHERS THEN--其他异常 RETURN -1; END fun_deductions;
调用:
select fun_deductions(1) from dual;
3、一个计算环周长的函数,两个输入参数,一个常量定义
CREATE OR REPLACE FUNCTION fun_circum_perimeter(angle NUMBER,radius NUMBER)--定义两个参数,angle:角度,radius:半径 RETURN NUMBER IS PI CONSTANT NUMBER := 3.1415926;--定义常量 circum_perimeter NUMBER;--定义返回变量 BEGIN circum_perimeter := ROUND((angle/360)*2*PI*radius,2);--计算 RETURN circum_perimeter; END fun_circum_perimeter;
调用:
SELECT fun_circum_perimeter(360,2) FROM DUAL;
4、选择结果返回
CREATE OR REPLACE FUNCTION fun_if(n INTEGER) RETURN INTEGER IS BEGIN IF n = 0 THEN RETURN 1; ELSIF n = 1 THEN RETURN n; ELSE RETURN -1; END IF; END;
5、阶乘
CREATE OR REPLACE FUNCTION fun_factorial(n POSITIVE) RETURN POSITIVE IS BEGIN IF n = 1 THEN RETURN n; ELSE RETURN n*fun_factorial(n-1); END IF; END;
6、斐波那契
CREATE OR REPLACE FUNCTION fun_fibonacci(n PLS_INTEGER) RETURN PLS_INTEGER IS fib_1 PLS_INTEGER := 0; fib_2 PLS_INTEGER := 1; BEGIN IF n = 1 THEN RETURN fib_1; ELSIF n = 2 THEN RETURN fib_2; ELSE RETURN fun_fibonacci(n-2) + fun_fibonacci(n-1); END IF; END;