在本章中,无涯教程将讨论PL/SQL中的函数,函数与过程相同,只不过它返回一个值,因此,上一章的所有讨论也适用于函数。
创建函数
使用 CREATE FUNCTION 语句创建一个函数。 CREATE OR REPLACE PROCEDURE 语句的简化语法如下-
CREATE [OR REPLACE] FUNCTION function_name [(parameter_name [IN | OUT | IN OUT] type [, ...])] RETURN return_datatype {IS | AS} BEGIN < function_body > END [function_name];
以下示例说明了如何创建和调用独立函数。此函数返回customers表中CUSTOMERS的总数。
无涯教程将使用在PL/SQL变量一章中创建的CUSTOMERS表-
Select * from customers; +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | +----+----------+-----+-----------+----------+
CREATE OR REPLACE FUNCTION totalCustomers RETURN number IS total number(2) := 0; BEGIN SELECT count(*) into total FROM customers; RETURN total; END; /
使用SQL提示执行上述代码时,将产生以下输出-
Function created.
调用函数
在创建函数时,您需要定义函数的功能,要使用功能,您将必须调用该功能来执行定义的任务,当程序调用函数时,程序控制将转移到被调用函数。
被调用的函数执行已定义的任务,并在执行其return语句或到达 last end语句时,将程序控制权返回给主程序。
要调用函数,您只需要传递所需的参数以及函数名称,如果函数返回值,则可以存储返回的值。以下程序从匿名块中调用函数 totalCustomers -
DECLARE c number(2); BEGIN c := totalCustomers(); dbms_output.put_line('Total no. of Customers: ' || c); END; /
当以上代码在SQL提示符下执行时,将产生以下输出-
Total no. of Customers: 6 PL/SQL procedure successfully completed.
下面的示例演示了声明,定义和调用一个简单的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; /
当以上代码在SQL提示符下执行时,将产生以下输出-
Maximum of (23,45): 45 PL/SQL procedure successfully completed.
递归函数
无涯教程已经看到一个程序或子程序可以调用另一个子程序,当子程序调用自身时,称为递归调用,该过程称为递归。
为了说明这个概念,让无涯教程计算一个数字的阶乘。 n的阶乘定义为-
n!=n*(n-1)! =n*(n-1)*(n-2)! ... =n*(n-1)*(n-2)*(n-3)... 1
以下程序通过递归调用自身来计算给定数字的阶乘-
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.
参考链接
https://www.learnfk.com/plsql/plsql-functions.html
标签:Functions,END,函数,number,无涯,SQL,RETURN,BEGIN From: https://blog.51cto.com/u_14033984/8937740