oracle中 procedure(存储过程)和function(函数)本质区别

Oracle 中 Procedure 和 Function 本质区别

在 Oracle 数据库中,Procedure 和 Function 都是存储过程的一种。但是它们有各自独特的特点和用途,下面详细讲解二者本质上的区别。

Procedure

1. 定义

Procedure 是一种存储程序,它是一组 SQL 语句和控制结构。它没有返回值,只负责完成一些操作,包括增删改查等操作。它是一种应用程序,可以接收参数和变量来执行相应的命令。

下面是一个求和 Procedure 的示例:

CREATE OR REPLACE PROCEDURE cal_sum(a IN NUMBER, b IN NUMBER, c OUT NUMBER)
IS
BEGIN
  c := a + b; -- 计算 a+b 的和,并将结果赋值给 c
END;
/

上面的示例是一个传入两个数 a 和 b,然后执行相应的求和操作,结果放在 c 中的 Procedure。

2. Procedure 的特点

  • Procedure 没有返回值,只具有完成一些特定操作的功能。
  • Procedure 可以有多个 IN 或 OUT 参数,也可以没有参数。
  • Procedure 可以调用其他 Procedure,还可以自动提交事务。
  • Procedure 可以包含流程控制语句(如 IF、LOOP、WHILE)和异常处理语句(如 EXCEPTION)等。

Function

1. 定义

Function 是一种存储程序,它也是一组 SQL 语句和控制结构。与 Procedure 不同的是,Function 是有返回值的,可以返回单个值或多个值。一般情况下,Function 用于查询或处理数据,并返回一个具体的结果。

下面是一个根据学生的成绩返回等级的 Function 的示例:

CREATE OR REPLACE FUNCTION get_grade(score IN NUMBER) RETURN VARCHAR2
IS
  grade VARCHAR2(20);
BEGIN
  IF score BETWEEN 90 AND 100 THEN
    grade := 'A';
  ELSIF score BETWEEN 80 AND 89 THEN
    grade := 'B';
  ELSIF score BETWEEN 70 AND 79 THEN
    grade := 'C';
  ELSIF score BETWEEN 60 AND 69 THEN
    grade := 'D';
  ELSE
    grade := 'F';
  END IF;

  RETURN grade; -- 返回值为等级
END;
/

上面的示例是一个传入一个学生成绩,然后返回相应等级的 Function。

2. Function 的特点

  • Function 具有返回值,返回单个值或多个值。
  • Function 可以有零个或多个 IN 参数和一个 OUT 或 RETURN 参数。
  • Function 不可以调用其他 Function,也不能进行自动提交事务。
  • Function 中不能包含 DDL 语句(如 CREATE、DROP、ALTER)等。

二者区别

  • Procedure 通常用于处理事务和 DML 操作,没有返回值,一般情况下需要使用 OUT 参数返回结果。
  • Function 通常用于查询或处理数据,有返回值,可以组合成表达式进行使用。
  • Procedure 不能包含 RETURN 语句返回结果,而 Function 必须包含 RETURN 语句返回结果。
  • Procedure 和 Function 可以共享相同的变量,但是 Procedure 中对变量的改变不会影响 Function 的操作,Function 中对变量的改变也不会影响 Procedure 的操作。

示例说明

  • 示例一:使用 Procedure 实现向库存表增加商品数量的操作
CREATE OR REPLACE PROCEDURE add_product_qty(p_id IN NUMBER, p_qty IN NUMBER)
IS
BEGIN
  UPDATE stock
  SET qty = qty + p_qty
  WHERE product_id = p_id;
END;
/

对于上述示例来说,采用 Procedure 的方式可以有效地实现对库存表的增加数量操作,不需要返回其它结果,且需要对同一库存表多次操作时可以复用该 Procedure。

  • 示例二:使用 Function 实现聚合运算
CREATE OR REPLACE FUNCTION get_dept_avg_salary(dept_name IN VARCHAR2)
RETURN NUMBER
IS
  dept_avg_salary NUMBER;
BEGIN
  SELECT AVG(salary) INTO dept_avg_salary FROM employees WHERE department_name = dept_name;

  RETURN dept_avg_salary;
END;
/

上述示例使用 Function 的方式实现了根据部门名称进行平均薪资的统计,并返回该部门的平均薪资值。采用该函数的方式可以实现简单的聚合运算,且可以方便地进行组合使用,例如将该 Function 与查找最高薪资的 Function 进行组合,实现各种复杂的查询操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:oracle中 procedure(存储过程)和function(函数)本质区别 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • redis分页获取数据

    php代码: 采用哈希类型存储数据,有序集合存储分页数据,进行倒序与正序的排序。 $getGoodsInfo = M(‘goods_test’)->select(); for($i=0;$i<count($getGoodsInfo);$i++){ $addStatus = $obRedis->zAdd(‘goods_key’,$getGoo…

    Redis 2023年4月12日
    00
  • shell脚本操作mysql数据库删除重复的数据

    当需要对MySQL数据库中的数据进行删除重复操作时,可以考虑使用Shell脚本来实现。以下是一个完整的攻略,包含步骤和示例说明。 步骤 首先需要建立数据库连接,可以使用以下的代码段: #!/bin/bash HOSTNAME="localhost" PORT="3306" USERNAME="root&quo…

    database 2023年5月22日
    00
  • 数据库开发总结(ADO.NET小结)

    数据库开发总结 (ADO.NET小结) 是一篇介绍 ADO.NET 的文章,本文将为你提供详细的攻略。 ADO.NET 简介 ADO.NET 是一种用于访问数据源的技术,它能够让我们轻松地访问多种数据源,如数据库、XML 文件等。ADO.NET 提供了一组数据访问技术,包括连接、命令、读取和写入数据等操作,具有高性能和可扩展性。 ADO.NET 中的核心对象…

    database 2023年5月21日
    00
  • MSSQL2005 INSERT,UPDATE,DELETE 之OUTPUT子句使用实例

    关于“MSSQL2005 INSERT,UPDATE,DELETE 之OUTPUT子句使用实例”的攻略,可以按照以下步骤进行讲解: 1. OUTPUT子句的介绍 OUTPUT子句是SQL Server中的一种用于返回操作结果的语法,适用于INSERT、UPDATE、DELETE语句。通过使用OUTPUT子句可以将被修改的行的信息返回给客户端,以便客户端进行进…

    database 2023年5月21日
    00
  • SQL – AND和OR 运算符

    当需要查询符合多个条件的记录时,可以使用SQL中的AND和OR运算符。这些运算符可以在SELECT、UPDATE、DELETE等语句中使用。 AND运算符 AND运算符可以用于连接两个或多个条件,只有当所有条件都被满足时,才会返回结果。AND运算符用法如下: SELECT column1, column2, … FROM table_name WHERE…

    database 2023年3月27日
    00
  • 关于oracle逻辑备份exp导出指定表名时需要加括号的问题解析

    关于Oracle逻辑备份exp导出指定表名时需要加括号的问题解析 在使用Oracle数据库进行备份时,可以采用逻辑备份进行数据的导出。在导出某个表的数据时,需要加上扩起来的表名,即对表名加上括号,例如:exp user/[password] tables=(employee) file=employee.dmp。 原因解析 导出数据时,需要使用exp命令,并…

    database 2023年5月22日
    00
  • Centos 7.3下SQL Server安装配置方法图文教程

    Centos 7.3下SQL Server安装配置方法图文教程 Microsoft SQL Server是一种关系数据库管理系统,可用于存储和检索数据。本教程将向您展示如何在CentOS 7.3上安装和配置SQL Server。 步骤1:添加Microsoft SQL Server存储库 使用以下命令将Microsoft SQL Server存储库添加到Ce…

    database 2023年5月22日
    00
  • Linux下的硬件安装

    下面我为你讲解“Linux下的硬件安装”的完整攻略。 Linux下的硬件安装攻略 步骤一:了解硬件信息 在安装硬件之前,需要先了解硬件的型号和操作系统对该硬件的支持情况。可以通过以下命令查看硬件信息: $ lspci 该命令会列出所有已安装的硬件信息,包括显卡、声卡、网卡等。通过查看硬件型号和厂商,可以获得操作系统对该硬件的支持情况。 步骤二:安装驱动程序 …

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部