PL/SQL - 函数(Functions)

PL/SQL - 函数(Functions) 首页 / PL/SQL入门教程 / PL/SQL - 函数(Functions)

在本章中,无涯教程将讨论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函数,该函数计算并返回两个值的最大值。

链接:https://www.learnfk.comhttps://www.learnfk.com/plsql/plsql-functions.html

来源:LearnFk无涯教程网

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.

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

技术与商业案例解读 -〔徐飞〕

如何设计一个秒杀系统 -〔许令波〕

从0开发一款iOS App -〔朱德权〕

性能工程高手课 -〔庄振运〕

职场求生攻略 -〔臧萌〕

Kubernetes入门实战课 -〔罗剑锋〕

超级访谈:对话玉伯 -〔玉伯〕

快速上手C++数据结构与算法 -〔王健伟〕

结构思考力 · 透过结构看表达 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)