函数与过程非常类似,它也是一种存储在数据库中的命名程序库,并且函也可以接收零个或多个输入参数。参数与过程的主要区别在于,函数必须有返回值,并且可以作为一个表达式的一部分,函数不能作为一个完整的语句使用。函数返回值的数据类型在创建函数时定义。函数定义的语法如下:
create [ or replace] function function_name (parameter, [parameter])
return data_type is
[local declarations]
begin
execute statements
[exception
exception handlers]
end[ function_name] 存储过程和函数之间的主要区别有两处:第一是在函数头部必须使用return 字指定函数返回的数据类型;二是在函数体内,在函数体内的任何地方都可以使用return语句返回结果值,返回值的数据类型必须与函数头部声明的相同。例如,下面创建了一个用于求平均数的函数。
SQL> create or replace function fun_average(num1 number, num2 number)
2 return number is
3 res number;
4 begin res:= (num1 + num2) / 2;
5 return(res);
6 end fun_average;
7 /
函数已创建。调用函数时必须使用一个变量来保存返回的结果值,这样函数就组成了表达式的一部分。这也意味着函数不能像过程那样独立的调用,它只能作为表达式的一部分。例如,在下面的匿名程序块中调用函数 fun_average,以获取两个数的平均值。
SQL> set serveroutput on
SQL> declare
2 avg_number number;
3 begin
4 avg_number := fun_average(22,33);
5 dbms_output.put_line(avg_number);
6 end;
7 /
27.5
PL/SQL 过程已成功完成。
SQL> select fun_average(22,33) from dual;
FUN_AVERAGE(22,33)
------------------
27.5理论上,在函数中也可以使用out类型的参数,但是如果在函数中同时使用return返回值和out参数很容易产生混淆。所以,在创建函数时应该使用return 语句返回一个单独的值,而将out参数用于过程。
本文介绍了数据库中的函数与过程的不同之处,重点讲解了函数的特点及如何创建和调用函数。通过实例演示了函数的定义和使用方法。

4087

被折叠的 条评论
为什么被折叠?



