【存储过程和存储函数】MySQL

news2024/11/20 18:23:43

存储过程和存储函数

一、实验目的

  1. 掌握通过SQL语句CREATE PROCEDURE创建存储过程的方法。

  2. 掌握使用SQL语句CALL调用存储过程的方法。

  3. 掌握使用SQL语句ALTER PROCEDURE修改存储过程的方法。

  4. 掌握使用SQL语句DROP PROCEDURE删除存储过程的方法。

  5. 掌握使用CREATE FUNCTION创建存储函数的方法。

  6. 掌握使用SQL语句ALTER FUNCTION修改存储函数的方法。

  7. 掌握使用SQL语句DROP FUNCTION删除存储函数的方法。
    二、实验内容

  8. 存储过程的创建、修改、删除及调用SQL语句。

  9. 存储函数的创建、修改、删除及执行SQL语句。
    三、实验步骤

  10. 输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名的学生的各科成绩。
    DELIMITER @@
    CREATE PROCEDURE stu_info(IN name CHAR(8) )
    BEGIN
    SELECT s.学号,姓名,课程编号,分数 FROM student_info s,grade g
    WHERE s.学号=g.学号 AND 姓名=name;
    END @@
    使用CALL命令执行存储过程stu_info,其参数值为’张青平’。
    DELIMITER ;
    CALL stu_info();
    在这里插入图片描述

  11. 使用studentsdb数据库中的student_info表、curriculum表、grade表。
    (1)创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、分数。
    DELIMITER @@
    CREATE PROCEDURE stu_grade()
    BEGIN
    SELECT 姓名,课程名称,分数 FROM student_info s,grade g,curriculum c
    WHERE s.学号=g.学号 AND g.课程编号=c.课程编号 AND s.学号=‘0001’;
    END @@
    (2)调用存储过程stu_grade。
    DELIMITER;
    CALL stu_grade();
    在这里插入图片描述

  12. 使用studentsdb数据库中的student_info表、curriculum表、grade表。
    (1)创建存储过程stu_name,当任意输入一个学生的姓名时,查看其课程的最高分、最低分、平均分。
    DELIMITER @@
    CREATE PROCEDURE stu_name(IN name CHAR(8))
    BEGIN
    SELECT 姓名,MAX(分数) 最高分,MIN(分数) 最低分,AVG(分数) 平均分
    FROM student_info s,grade g,curriculum c
    WHERE s.学号=g.学号 AND g.课程编号=c.课程编号 AND 姓名=name;
    END @@
    (2)调用存储过程stu_name。
    在这里插入图片描述

(3)删除存储过程stu_name。
DROP PROCEDURE stu_name;
4. 使用studentsdb数据库中的grade表。
(1)创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参数获取该学生选修课程的门数。
DELIMITER @@
CREATE PROCEDURE stu_g_r(IN cno CHAR(4),OUT num IN)
BEGIN
SELECT count(*) INTO num
FROM grade
WHERE 课程编号=cno;
END @@
(2)执行存储过程stu_g_r,输入学号0002。
DELIMITER;
CALL stu_g_r(‘0002’,@num);
(3)显示0002号学生的选课门数。
SELECT @num
在这里插入图片描述

  1. 使用studentsdb数据库中的curriculum表、grade表。
    (1)创建一个存储函数num_func,统计指定课程名称的选课人数。
    SET GLOBAL log_bin_trust_function_creators=1;
    DELIMITER @@
    CREATE FUNCTION num_func(cname VARCHAR(50) CHARACTER SET utf8)
    RETURNS INT
    BEGIN
    DECLARE num INT;
    SELECT COUNT(*)INTO num FROM grade g,curriculum c
    WHERE g.课程编号=c.课程编号 AND 课程名称=cname;
    RETURN num;
    END @@
    (2)执行存储函数num_func,查看“C语言程序设计”选课人数。
    在这里插入图片描述

  2. 使用studentsdb数据库中的curriculum表、grade表。
    (1)创建一个存储函数avg_func,通过游标统计指定课程的平均分。
    DELIMITER @@
    CREATE FUNCTION avg_func(cname VARCHAR(50) CHARACTER SET utf8)
    RETURNS DECIMAL
    BEGIN
    DECLARE v_avg DECIMAL;
    DECLARE avg_Cur CURSOR FOR SELECT avg(分数) FROM grade g,curriculum c
    WHERE g.课程编号=c.课程编号 AND 课程名称=cname;
    OPEN avg_Cur;
    FETCH avg_Cur INTO v_avg;
    CLOSE avg_Cur;
    RETURN v_avg;
    END @@
    (2)执行存储函数avg_func,查看“C语言程序设计”课程平均分。
    SELECT avg_func(‘C语言程序设计’) 课程平均分;
    在这里插入图片描述

(3)删除存储函数avg_func。
DROP FUNCTION avg_func;
四、实验思考

  1. 存储函数和存储过程如何将运算结果返回给外界?
    存储函数:RETURN
    存储过程:OUT参数或INOUT参数
  2. 存储函数有OUT参数、INOUT参数吗?
    没有

五、实验总结
1、收获
通过本次实验我知道了什么是存储过程和存储函数,学会了存储过程的创建、修改、删除及调用SQL语句和存储函数的创建、修改、删除及执行SQL语句。
2、存在的问题
在成功创建存储过程之后,使用CAll语句执行失败,原因是数据库字段问题,没有设置为utf8。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1384122.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息检索速通知识点

仅仅是我自己能想到的对这个分类的一个记忆。欢迎指正 首先,最重要的一点,什么是信息检索? 信息检索是从大规模无规则的数据中(主要是文档)中查询用户所需要的信息的过程。 然后,信息检索有哪几种索引呢&am…

机器人行业概况(2)

上篇已经介绍过关于机器人的定义以及分类,下面来看看机器人产业市场规模。 二、国内机器人产业市场规模 中国机器人产业在国家智能制造相关政策的引导下蓬勃发展。在新冠肺炎疫情防控期间,消毒、配送、测温、巡检等各类机器人的“火线上岗”&#xff0…

对写文章的想法

一些思考 思考初心现在错觉想说的话 最后 思考 在CSDN里面写文章已经快半年了啊,虽然更得不多,但每一篇都花费很多时间,写的时候能帮自己查漏补缺,这边找找资料补充一下,都能去拓展自己的知识面,让自己的文…

JDK8终将走进历史,Oracle宣布JDK继续免费

目录 前言Oracle 已免费提供 JDKOracle Java SE 产品最新动态 为什么业界中用JDK8那么多Java SE 8 公共更新结束总结 前言 今天想到上个月无意中听闻到的一句话:JDK8之后收费了,所以大家都用JDK8。当时只觉得这个话说得不对,但因为和说话的人…

基于Java SSM框架实现学生成绩管理系统项目【项目源码+论文说明】

基于java的SSM框架实现学生成绩管理系统演示 摘要 学生成绩是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。而学生所在学院多采用半手工管理学生成绩的方式&#…

代码随想录——回溯

系列文章目录 代码随想录——回溯 文章目录 系列文章目录概述组合组合组合III电话号码的字母组合组合总和组合总和II 分割分割回文串** 复原ip地址 子集子集子集II 概述 回溯的本质就是递归遍历,但在完成某一条路之后会撤回到上一层,然后重新选择另一条…

V2022全栈培训笔记(WEB攻防49-WEB攻防-通用漏洞业务逻辑水平垂直越权访问控制脆弱验证)

第49天 WEB攻防-通用漏洞&业务逻辑&水平垂直越权&访问控制&脆弱验证 知识点: 1、水平越权同级用户权限共享 2、垂直越权-低高用户权限共享 3、访问控制-验证丢失&取消验证 4、脆弱验证-Cookie&Token&Jwt等 #前置知识: 1、…

Flask架构--路由和蓝图

学习视频:第二章:路由和蓝图 1 Flask查询路由的方式_哔哩哔哩_bilibili 参考:Flask框架之路由与蓝图的使用_flask 路由和蓝图-CSDN博客 1.路由的概念: 用于将http请求与特定的python函数相匹配。定义路由后,flask程…

虚拟政务大厅有什么好处,搭建虚拟政务大厅需要考虑哪些因素

引言: 在数字化时代,互联网技术推动了各行业发展,政务领域也不例外。虚拟政务大厅作为一种数字化解决方案,不仅改善了政务处理的效率和服务质量,还为政务处理带来了许多其他好处。 一、提高政务处理效率 1.虚拟政务大…

行业内参~移动广告行业大盘趋势-2023年12月

前言 2024年,移动广告的钱越来越难赚了。市场竞争激烈到前所未有的程度,小型企业和独立开发者在巨头的阴影下苦苦挣扎。随着广告成本的上升和点击率的下降,许多原本依赖广告收入的创业者和自由职业者开始感受到前所未有的压力。 &#x1f3…

七、Qt 信号和槽

在QT4以上的版本,在窗体上用可以通过选中控件,然后点击鼠标右键单击按钮,选择“转到槽”。可以自动创建信号和槽。 选择clicked(),并点击 ok Qt Creator会给头文件和代码文件自动添加 这个按钮的单击事件(信号和槽)。 …

训练AI模型:寻找最优参数a和b

人工智能的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心,我为大家整理了一份600多G的学习资源,基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

哔哩哔哩浏览器 AI 助手:bilibili subtitle

分享一个好用不火的浏览器插件,能够让我们在浏览 B 站视频的时候体验更棒。 写在前面 B 站视频时间越来越长的今天,在打开视频的时候,如果能够清晰直观的看到视频字幕,当我们点击带有时间轴的字幕就能够一键跳转到自己想看的视频…

VSCode编写 C/C++ 程序

VSCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,并…

Java SPI机制总结系列之开发入门实例

原创/朱季谦 在该文章正式开始前,先对 Java SPI是什么做一个简单的介绍。 SPI,是Service Provider Interface的缩写,即服务提供者接口,单从字面上看比较抽象,你可以理解成,该机制就像Spring容器一样&…

Baumer工业相机堡盟工业相机如何使用OpenCV实现相机图像的显示(C#)

Baumer工业相机堡盟工业相机如何使用OpenCV实现相机图像的显示(C#) Baumer工业相机Baumer工业相机的图像转换为OpenCV的Mat图像的技术背景在NEOAPI SDK里使用OpenCV实现相机图像的显示联合OpenCV实现相机图像的显示测试演示图 工业相机通过使用OpenCV实现…

【QML COOK】- 008-自定义属性

前面介绍了用C定义QML类型,通常在使用Qt Quick开发项目时,C定义后端数据类型,前端则完全使用QML实现。而QML类型或Qt Quick中的类型时不免需要为对象增加一些属性,本篇就来介绍如何自定义属性。 1. 创建项目,并编辑Ma…

Minio安装及整合SpringBoot

一. MinIO概述 官网地址:https://minio.org.cn MinIO是一款基于Apache License v2.0开源协议的分布式文件系统(或者叫对象存储服务),可以做为云存储的解决方案用来保存海量的图片、视频、文档等。由于采用Golang实现,服…

细说JavaScript语句详解

一、顺序结构 二、表达式语句 三、声明语句 四、条件语句 1、if语句 2、if…else语句 3、else if语句 4、switch语句 五、循环语句 1、while循环 2、do… while循环 3、for循环 4、for…in循环 六、跳出语句 1、label语句 2、break语句 3、continue语句

Go interface基础

接口类型是对其它类型行为的概括与抽象。通过使用接口,我们可以写出更加灵活和通用的函数,这些函数不用绑定在一个特定的类型实现上。 很多面向对象的语言都有接口这个概念,Go 语言的接口的独特之处在于它是隐式实现。换句话说,对…