GBSE存储过程

假设我们有一个员工表employees,包含字段employee_id(员工ID)、employee_name(员工姓名)、salary(工资)和department(部门)。现在我们希望创建一个存储过程,根据输入的部门名称,计算每个部门的平均工资

CREATE PROCEDURE calculate_average_salary(IN dept_name VARCHAR(255), OUT avg_salary DECIMAL(10, 2))
BEGINDECLARE total_salary DECIMAL(10, 2) DEFAULT 0;DECLARE emp_count INT DEFAULT 0;DECLARE done INT DEFAULT 0;DECLARE cur CURSOR FOR SELECT salary FROM employees WHERE department = dept_name;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;OPEN cur;read_loop: LOOPFETCH cur INTO total_salary;IF done THENLEAVE read_loop;END IF;SET emp_count = emp_count + 1;SET total_salary = total_salary + salary;END LOOP;CLOSE cur;IF emp_count > 0 THENSET avg_salary = total_salary / emp_count;ELSESET avg_salary = 0;END IF;
END;

在这个示例中,我们创建了一个名为calculate_average_salary的存储过程。这个过程接收一个输入参数dept_name(部门名称),并返回一个输出参数avg_salary(平均工资)。存储过程中使用了以下控制结构:

声明变量:用于存储计算过程中的中间值。
声明游标:用于遍历满足条件的员工记录。
声明处理器:用于处理游标读取结束的情况。
循环结构:遍历满足条件的员工记录,并计算总工资和员工数量。
条件结构:根据员工数量计算平均工资,避免除数为零的情况。
要调用这个存储过程,可以使用以下语句:

DECLARE @average_salary DECIMAL(10, 2);
CALL calculate_average_salary('IT', @average_salary);
SELECT @average_salary;

下面就是详细解释每句话

创建存储过程:

CREATE PROCEDURE calculate_average_salary(IN dept_name VARCHAR(255), OUT avg_salary DECIMAL(10, 2))
BEGIN

这部分代码定义了存储过程的名称calculate_average_salary,并声明了两个参数:输入参数dept_name和输出参数avg_salary。

声明变量:

DECLARE total_salary DECIMAL(10, 2) DEFAULT 0;
DECLARE emp_count INT DEFAULT 0;
DECLARE done INT DEFAULT 0;

这部分代码声明了三个变量:total_salary用于存储部门的总工资,emp_count用于存储员工数量,done用于标记游标读取结束。

声明游标:

DECLARE cur CURSOR FOR SELECT salary FROM employees WHERE department = dept_name;

这部分代码声明了一个游标cur,用于遍历员工表employees中属于指定部门(dept_name)的记录。

声明处理器:

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

这部分代码声明了一个处理器,用于处理游标读取结束的情况。当游标没有更多记录时,将done变量设置为1。

打开游标:

OPEN cur;

这部分代码打开游标,准备开始读取记录。

循环结构:

read_loop: LOOPFETCH cur INTO total_salary;IF done THENLEAVE read_loop;END IF;SET emp_count = emp_count + 1;SET total_salary = total_salary + salary;END LOOP;

这部分代码使用LOOP循环结构遍历满足条件的员工记录。FETCH语句用于从游标中获取当前记录的salary字段值,并将其累加到total_salary变量中。emp_count变量用于统计员工数量。

当游标读取结束时,done变量被设置为1,循环将跳出。

关闭游标:

CLOSE cur;

这部分代码关闭游标,释放相关资源。

计算平均工资:

IF emp_count > 0 THENSET avg_salary = total_salary / emp_count;
ELSESET avg_salary = 0;
END IF;

这部分代码使用IF条件结构判断是否有员工记录。如果员工数量大于0,则计算平均工资(总工资除以员工数量),否则将平均工资设置为0。

结束存储过程:

END;

这部分代码表示存储过程的结束。

Gbase存储过程详细教程相关推荐

  1. Oracle存储过程详细教程

    Oracle存储过程详细教程 点关注不迷路,欢迎再访! 精简博客内容,尽量已行业术语来分享. 努力做到对每一位认可自己的读者负责. 帮助别人的同时更是丰富自己的良机. 目录 Oracle存储过程详细教 ...

  2. mysql存储过程详细教程

    原文 记录MYSQL存储过程中的关键语法: DELIMITER // 声明语句结束符,用于区分;  CEATE PROCEDURE demo_in_parameter(IN p_in int) 声明存 ...

  3. Flayway mysql自动生成版本_Flyway详解及Springboot集成Flyway的详细教程

    Flayway是一款数据库版本控制管理工具,,支持数据库版本自动升级,Migrations可以写成sql脚本,也可以写在java代码里:不仅支持Command Line和java api ,也支持Bu ...

  4. exec php 菜鸟教程,sql存储过程菜鸟教程

    这篇文章主要为大家详细介绍了sql存储过程菜鸟教程,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 存储过程是已编译好的T-SQL语句的集合,可以随 ...

  5. C#连接和使用MySQL数据库详细教程

    C#连接MySQL需要添加连接MySQL的引用 本文将介绍3种添加MySQL引用的方法,以及连接MySQL和使用MySQL的教程 C#引用MySQL步骤: 第一种方法: 下载mysql.data.dl ...

  6. Java连接数据库实现图书馆管理系统(详细教程)

    该功能用到的软件为 IDEA .Navicat .云服务器(非必须) 一.建立数据库 在自己的服务器或者电脑本机安装数据库系统,本次系统演示的数据库版本为5.6. 1.创建图书管理数据库library ...

  7. mMySQL中触发器和游标的介绍与使用L8.0.23免安装版配置详细教程 msi安装超详细教程

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 一.下载MySql,安装 ...

  8. 手把手从零开始搭建k8s集群超详细教程

    本教程根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程 k8s集群搭建超详细教程 1. 基本环境搭建 1. 创建私有网络 2. 创建服务 ...

  9. mysql query browswer_MySQL数据库新特性之存储过程入门教程

    MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...

最新文章

  1. 模拟内存计算如何解决边缘人工智能推理的功耗挑战
  2. 使用C语言来实现模块化
  3. 艾弗森、穆大叔遭“姚式幽默”调侃 全场爆笑
  4. 海量数据库解决方案2011030401
  5. cisco switch configuration
  6. 蓝桥杯单片机:12届省赛
  7. MATLAB代码: 合并两张图
  8. 终于转了,写写人生学习规划
  9. 【过拟合】再也不用担心过拟合的问题了
  10. Swift 枚举的用法
  11. vsCode 快捷键、插件
  12. centos安装activitymq
  13. 开环单位增益带宽 , 与-3db的关系
  14. 开发过程中沟通的重要性
  15. oracle min(date),Oracle / PLSQL MIN函数
  16. 计算机按键去抖动的方式,键盘去抖动原则和方法
  17. 面向毕业、职称的SCI论文高效写作方法
  18. 移轴镜头摄影计算机作业模板,移轴镜头拍摄技巧全攻略
  19. 非官方esp8266烧写出厂默认AT固件v1.5.4.1
  20. XenophonDAO如何使用一颗巧克力的成本摆脱美元霸权,深刻解读$OXPH

热门文章

  1. html 整体缩小zoom,页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
  2. 阿里巴巴创始人马云:阿里是幸福指数最高的企业
  3. Nhibernate+MVC开发小结
  4. 在本地搭建Discuz!论坛
  5. Ant构建工具知识概括
  6. R Markdown 如何使用外部css
  7. 高性能电工·电子技术实训考核装置
  8. 数字IC设计工程师成长之路
  9. 人民币小写转换为大写
  10. supervisord