PL/SQL 函数
PL/SQL函数与PL/SQL过程非常相似。过程与函数之间的主要区别在于,函数必须始终返回值,另一方面,过程可能会也可能不会返回值。除此之外,PL/SQL过程的所有其他内容也适用于PL/SQL函数。
创建函数的语法:
CREATE [OR REPLACE] FUNCTION function_name [parameters]
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
return return_datatype
{IS | AS}
BEGIN
< function_body >
END [function_name];
此处:
function_name: 指定功能的名称。
[OR REPLACE] 选项允许修改现有功能。
optional parameter list包含参数的名称,模式和类型。
IN 表示将从外部传递值,而OUT表示此参数将用于在过程外部返回值。
该函数必须包含一个return语句。
RETURN子句指定您要从该函数返回的数据类型。
Function_body包含可执行部分。
使用AS关键字代替IS关键字来创建独立功能。
PL/SQL函数示例
让我们看一个
创建函数的简单示例。
create or replace function adder(n1 in number, n2 in number)
return number
is
n3 number(8);
begin
n3 :=n1+n2;
return n3;
end;
/
现在编写另一个程序以
调用该功能。
DECLARE
n3 number(2);
BEGIN
n3 := adder(11,22);
dbms_output.put_line('Addition is: ' || n3);
END;
/
输出:
Addition is: 33
Statement processed.
0.05 seconds
另一个PL/SQL函数示例
让我们以一个示例演示如何声明,定义和调用一个简单的PL/SQL函数,该函数将计算并返回两个值的最大值。
DECLARE
a number;
b number;
c number;
FUNCTION findMax(x IN number, y IN number)
return number
IS
z number;
BEGIN
if x > y THEN
z:= x;
ELSE
Z:= y;
END IF;
return z;
END;
BEGIN
a:= 23;
b:= 45;
c := findMax(a, b);
dbms_output.put_line(' Maximum of (23,45): ' || c);
END;
/
输出:
Maximum of (23,45): 45
Statement processed.
0.02 seconds
使用表的PL/SQL函数示例
我们来看一个客户表。本示例说明了如何创建和调用独立函数。此函数将返回客户表中的客户总数。
注意: 创建客户表并在其中记录。
Id |
名称 |
部门 |
薪金 |
1 |
alex |
网络开发人员 |
35000 |
2 |
ricky |
程序开发人员 |
45000 |
3 |
mohan |
网页设计师 |
35000 |
4 |
dilshad |
数据库管理 |
44000 |
创建功能:
CREATE OR REPLACE FUNCTION totalCustomers
return number IS
total number(2) := 0;
BEGIN
SELECT count(*) into total
FROM customers;
return total;
END;
/
执行上述代码后,您会得到以下结果。
调用PL/SQL函数:
在创建函数时,您必须定义函数的功能。要使用功能,您将必须调用该功能以执行定义的任务。调用函数后,程序控制将转移到被调用函数。
成功完成定义的任务后,调用函数将程序控制权返回给主程序。
要调用函数,您必须将必需的参数以及函数名称一起传递,如果函数返回值,则可以存储返回的值。以下程序从匿名块中调用函数totalCustomers:
DECLARE
c number(2);
BEGIN
c := totalCustomers();
dbms_output.put_line('Total no. of Customers: ' || c);
END;
/
在SQL提示符下执行以上代码后,您将获得以下结果。
Total no. of Customers: 4
PL/SQL procedure successfully completed.
PL/SQL递归函数
您已经知道一个程序或一个子程序可以调用另一个子程序。当子程序调用自身时,它称为递归调用,并且该过程称为递归。
计算数字阶乘的示例
让我们以计算数字阶乘的示例为例。本示例通过递归调用自身来计算给定数字的阶乘。
DECLARE
num number;
factorial number;
FUNCTION fact(x number)
return number
IS
f number;
BEGIN
if x=0 THEN
f := 1;
ELSE
f := x * fact(x-1);
END IF;
return f;
END;
BEGIN
num:= 6;
factorial := fact(num);
dbms_output.put_line(' Factorial '|| num || ' is ' || factorial);
END;
/
在SQL提示符下执行上述代码后,将产生以下结果。
Factorial 6 is 720
PL/SQL procedure successfully completed.
PL/SQL删除函数
删除已创建函数的语法:
如果要删除已创建函数从数据库中,应使用以下语法。
DROP FUNCTION function_name;