函数的结构:
function [schema.]function_name
[(parameter [, ...])] --参数列表
return return_datatype --返回数据类型
[authid {definer | current_user}] --指定使用定义者权限还是调用者权限
[deterministic] --系统为函数的返回值保留一个复制,优化器决定使用保留的复制还是重新执行。
[parallel_enable n] --在select调用函数时可以并行处理
[prpellned] --函数的结果应该通过pile row命令多次返回
[result_cache ...] --指定函数的输入值和返回值都要保存在函数结果缓存中
is
[declaration statements] --声明部分,可选。
begin
executable statements --可执行部分,至少有一个return
[exception
exception handlers] --异常处理句柄,可选
end [function_name];
函数头:is以上部分。通常包括函数名,参数列表,返回数据类型,有关函数定义和行行为的修饰符。
函数体:is以下部分。通常包括声明部分(可选)、可执行部分、异常处理部分(可选)。在可执行部分至少包含一个return语句。
return语句:在函数的可执行部分必须包含一个return语句,当然也可以由多个,但函数只执行一个return语句。当第一个return语句执行之后,函数立即终止执行,并把控制权 交还给调用的pl/sql块。return语句决定了函数的返回值。
函数头部的return指定了返回的数据类型,而可执行部分的return语句才是返回的真正值。
函数体中return语句的返回值的数据类型必须和函数头中指定的返回数据类型相兼容。
关于多个return语句:函数体中可以有多个return语句,但只有一个会被执行。如果不确定返回哪个值,可以使用变量,在函数的最后返回该变量
end标签:可以直接写 end;,但最好在end后写上函数的名字,这是好的习惯。
返回的数据类型:可以返回任何数据类型,但不能返回异常
函数的调用:过程可以作为一个独立的可执行语句被执行,但函数不可以,函数只能作为pl/sql语句的一部分被调用。
不带参数的函数:对于不带参数的函数,在调用时可以加括号(),也可以不加括号。