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];
这里:
让我们看一个简单的例子来 创建一个函数 。
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函数,它将计算并返回两个值的最大值。
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
让我们来看一个客户表。这个例子说明了创建和调用一个独立函数。这个函数将返回客户表中的客户总数。
Customers Id | Name | Department | Salary |
---|---|---|---|
1 | alex | web developer | 35000 |
2 | ricky | program developer | 45000 |
3 | mohan | web designer | 35000 |
4 | dilshad | database manager | 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.
您已经知道程序或子程序可以调用另一个子程序。当一个子程序调用自身时,称为递归调用,该过程称为递归。
让我们举一个计算一个数的阶乘的示例。这个示例通过递归调用自身来计算给定数的阶乘。
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.
删除您创建的函数的语法:
如果您想要从数据库中删除您创建的函数,您应该使用以下语法。
DROP FUNCTION function_name;
本文链接:http://so.lmcjl.com/news/18235/