PL/SQL 函数

2025 年 2 月 14 日 | 6 分钟阅读

PL/SQL 函数与 PL/SQL 过程非常相似。过程和函数的主要区别在于,函数必须始终返回值,而过程可以返回也可以不返回值。除此之外,PL/SQL 过程的所有其他内容也适用于 PL/SQL 函数。

创建函数的语法

其中

  • Function_name: 指定函数的名称。
  • [OR REPLACE] 选项允许修改现有函数。
  • 可选参数列表包含参数的名称、模式和类型。
  • IN 表示值将从外部传递,而 OUT 表示此参数将用于从过程外部返回值。

函数必须包含一个 return 语句。

  • RETURN 子句指定您将要从函数返回的数据类型。
  • Function_body 包含可执行部分。
  • 对于创建独立函数,使用 AS 关键字代替 IS 关键字。

您所说的 Return 语句是什么意思?

return 语句用于立即完成其执行并返回到调用程序。 在调用程序中执行会继续执行子程序调用之后的语句。 函数的执行部分中必须至少有一个 return 语句,才能从函数内部返回值,使用以下语句:

Return <expression>;

在上面的语法中,其中表达式计算为函数本身的返回数据类型。

PL/SQL 函数示例

让我们看一个简单的例子来创建一个函数

现在编写另一个程序来调用该函数

输出

Addition is: 33
Statement processed.
0.05 seconds

函数有两种类型

  • 局部函数
  • 存储函数

局部函数

局部函数是在 PL/SQL 块的声明中定义的函数。 不能由该封闭块之外定义的 PL/SQL 块调用该函数。

以下语法用于声明局部函数

示例 1:编写一个函数,用于显示 EMP 表中员工的工资,该员工的员工编号已给出。

输出

Function created.

另一个 PL/SQL 函数示例

让我们举一个例子来演示声明、定义和调用一个简单的 PL/SQL 函数,该函数将计算并返回两个值的最大值。

输出

Maximum of (23,45): 45
Statement processed.
0.02 seconds

使用表的 PL/SQL 函数示例

让我们创建一个客户表。此示例说明了创建和调用独立函数。此函数将返回客户表中 CUSTOMERS 的总数。

创建客户表并在其中保存记录。

客户
ID名称部门薪金
1亚历克斯Web 开发人员35000
2瑞奇程序开发人员45000
3莫汉网页设计师35000
4迪尔沙德数据库经理44000

存储函数

存储函数是已编译并存储在 Oracle 引擎系统表之一中的命名 PL/SQL 块。

以下语法用于创建存储函数

创建存储函数的示例

执行上述代码后,您将获得以下结果。

Function created. 

调用 PL/SQL 函数

创建函数时,您必须给出该函数要做什么的定义。 要使用函数,您将需要调用该函数来执行定义的任务。 一旦调用了该函数,程序控制权就会转移到被调用的函数。

在成功完成定义的任务后,调用函数会将程序控制权返回给主程序。

要调用函数,您必须将所需的参数与函数名称一起传递,如果函数返回一个值,那么您可以存储返回的值。 以下程序从匿名块调用函数 totalCustomers

在 SQL 提示符下执行上述代码后,您将获得以下结果。

Total no. of Customers: 4
PL/SQL procedure successfully completed.

PL/SQL 递归函数

您已经知道一个程序或子程序可以调用另一个子程序。 当一个子程序调用自身时,称为递归调用,该过程称为递归。

计算数字的阶乘的示例

让我们举一个例子来计算一个数字的阶乘。 此示例通过递归调用自身来计算给定数字的阶乘。

在 SQL 提示符下执行上述代码后,它会产生以下结果。

Factorial 6 is 720 
PL/SQL procedure successfully completed.

PL/SQL 删除函数

删除您创建的函数的语法

如果要从数据库中删除您创建的函数,则应使用以下语法。

在上面的语法中,drop 是一个命令,function_name 是您要删除的函数的名称。

示例

Drop function fact;

在上面的示例中,drop 命令用于删除名为 fact 的函数;

创建函数的规则

创建函数时应牢记以下几点

  • 函数可以接受一个或多个参数。
  • 避免将 OUT 和 IN OUT 节点与函数一起使用。
  • 函数中必须至少有一个“Return”语句。
  • 在函数的标头中添加带有数据类型的 return 子句。
  • PL/SQL 用户定义函数可以从任何可以调用内置函数的 SQL 表达式中调用。
  • 不能从 CREATE 或 ALTER TABLE 语句的 CHECK 约束子句中调用存储的 PL/SQL 函数。

PL/SQL 函数的优点

函数对程序员来说非常有用。 它们促进了可重用性和可维护性。 声明后,它们可以在许多应用程序中使用,可以使用多次。 如果需求发生变化,那么我们只需要修改函数。 因此,它促进了可维护性。

下面列出了 PL/SQL 中函数的各种优点。

  • 代码重用性
  • 性能优化
  • 封装和抽象
  • 提高安全性
  • 数据完整性

关于 PL/SQL 函数的 MCQS

1. 以下哪一项语句可用于在 PL/SQL 中创建函数?

  1. 创建函数
  2. 创建表
  3. 创建子程序
  4. 创建存储过程

答案:a

说明

创建函数用于在 PL/SQL 中创建子程序。


2. 以下哪种参数模式用于 PL/SQL 中的函数?

  1. READ 参数
  2. IN 参数
  3. OUT 参数
  4. IN OUT 参数

答案:b

说明

在 PL/SQL 函数中,使用 IN 参数模式。


3. 以下哪个语句用于删除函数?

  1. DROP Function;
  2. Delete Function fun_name;
  3. DROP Function fun_name;
  4. Delete Function;

答案:c

说明

DROP Function fun_name;

此语句用于在 PL/SQL 中删除函数。


4. PL/SQL 中过程和函数的主要区别是什么?

  1. 过程不返回值,而函数返回值。
  2. 过程返回值,而函数不返回值。
  3. 过程和函数没有任何主要区别。
  4. 过程和函数都不返回值。

答案:a

说明

过程和函数的主要区别在于,过程不返回值,而函数返回值。


5. PL/SQL 中函数定义中的“REPLACE”关键字用于修改现有函数。

  1. 是的
  2. 不能

答案:a

说明

replace 关键字用于修改现有函数。


下一个主题PL/SQL 游标