本文概要
在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]选项允许修改现有的功能。
- 可选的参数列表包含名称,模式和类型的参数。
- 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函数示例
让我们的客户表。这个例子说明了创建和调用一个独立的功能。该函数将返回客户CUSTOMERS表的总数。
创建客户表,并有记录它。
ID | 名称 | 部门 | 薪水 |
---|---|---|---|
1 | alex | Web开发人员 | 35000 |
2 | 瑞奇 | program developer | 45000 |
3 | mohan | web designer | 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;
/
上面的代码执行后,你会得到以下结果。
Function created.
调用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功能
语法删除你创建的函数:
如果你想从数据库中删除你创建的函数,你应该使用下面的语法。
DROP FUNCTION function_name;
评论前必须登录!
注册