oracle存储函数(10级学员 马林课堂总结)

函数

2012/3/22

函数与存储过程非常相似,它也是一种存储在数据库中的命名程序块,也可以接受输入值,进行逻辑处理后将结果返回调用者。函数与存储过程之间的主要区别在于,函数必须有返回值,并且可以作为一个表达式的一部分,但不能作为一个完整的语句使用。

创建函数

创建函数的语法与创建存储过程的语法非常相似,它们遵循相同的规则,参数传递也相同。只是在创建函数事可以为其指定大量的属性。创建函数的基本语法如下:

         create [or replace] function function_name

         [(parameter [{ in | out | in out}] date_type,

parameter [{ in | out | in out}] date_type,……)]

return return_type;

{is|as}

Declaration section

Begin

Executable statements

Exception

Exception handlers;

End [function_name]

从这个语法结构可以看出,定义存储过程和函数之间的主要区别之一是,函数必须包含RETURN数据类型子句,用于指定函数返回的数据类型。在函数体内,用户可以再任何地方使用RETURN<expression>语句返回值,其返回值的数据类型必须是函数头中声明的。

例如,下面创建的函数用于求某个数的阶乘:

createorreplacefunction TestFunction (n innumber)

returnnumber

as

Resultnumber:=1;

begin

for i in1..n

loop

Result:=Result*i;

endloop;

return(Result);

end TestFunction;

 

创建的函数TestFunction可以求出任意正整数n!。需要注意,该函数的头部声明看了return值的类型,然后在函数体中使用return语句来返回一个该类型的值。

 

调用函数

       调用函数与调用过程不同,调用函数时,需要一个变量来保存返回值的结果值,这样函数就组成了表达式的一部分。因此,不能像调用过程那样调用过程那样独立的调用函数。

         例如调用上面创建好的TestFunction函数:

declare

var_num number:=5;

var_function number:=0;

begin

var_function:=TestFunction(var_num);

dbms_output.put_line(var_function);

end;

输出结果为;

试图通过EXEC语句来调用函数TestFunction,正如下面错误提示信息所显示

TestFunction不是过程

提示:

在函数中也可以使用OUT参数,但是在函数中同时使用RETURNOUT参数很容易产生混淆,所以在创建函数时,应该使用RETURN语句返回一个单独的值,而将OUT参数用于过程中。

你可能感兴趣的:(oracle存储函数(10级学员 马林课堂总结))