返回介绍

PL/SQL 函数 - PL/SQL 教程

发布于 2025-02-22 13:46:46 字数 3298 浏览 0 评论 0 收藏 0

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];

这里,

  • function-name 指定函数的名称
  • [OR REPLACE] 选项允许修改现有的函数
  • 可选的参数列表中包含的名称,模式和类型的参数。IN 表示该值将被从外部传递和 OUT 表示该参数将被用于过程外面返回一个值
  • 函数必须包含一个 return 语句
  • RETURN 子句指定要在函数返回的数据类型
  • function-body 包含可执行部分
  • AS 关键字来代替了 IS 关键字用于创建一个独立的函数

示例:

下面的示例说明创建和调用一个独立的函数。函数返回在 CUSTOMERS 表中的客户总数。我们将使用 CUSTOMERS 表,已在前面 PL/SQL 变量的章节中创建:

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 语句或达到其最后一个语句,程序控制返回到主程序。

调用函数只需要通过必要的参数以及函数名称,如果函数返回一个值,那么可以存储返回值。下面的程序是调用一个匿名块函数 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.

PL/SQL 递归函数

我们已经看到,程序或子程序可以调用另一个子程序。当子程序调用自身,它被称为递归调用。

为了说明这个概念,让我们计算一个数的阶乘。一个数 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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文