-
CREATE OR REPLACE FUNCTION
RETURN
BEGIN
[
RETURN
[EXCEPTION
从上面的格式可以看出:
1)Function必须要有一个名字
2)可能有一个或多个参数;
3)必须指定返回值的类型
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;