实验9 存储过程与函数的创建管理实验

一、实验目的:

  1. 理解存储过程和函数的概念。
  2. 掌握创建存储过程和函数的方法。
  3. 掌握执行存储过程和函数的方法。
  4. 掌握游标的定义、使用方法。

二、实验内容

1.某超市的食品管理的数据库的Food表,Food表的定义如表所示,
Food表的定义
在这里插入图片描述
各列有如下数据:
‘QQ饼干’,‘QQ饼干厂’,2.5,‘2008’,3,‘北京’
‘MN牛奶’,‘MN牛奶厂’,3.5,‘2009’,1,‘河北’
‘EE果冻’,‘EE果冻厂’,1.5,‘2007’,2,‘北京’
‘FF咖啡’,‘FF咖啡厂’,20,‘2002’,5,‘天津’
‘GG奶糖’,‘GG奶糖’,14,‘2003’,3,‘广东’

(1) 在food表上创建名为Pfood_price_count的存储过程。其中存储过程Pfood_price_count有3个参数。输入参数为price_infol和price_info2,输出参数为count。存储过程的满足:查询food表中食品单价高于price_infol且低于price_info2的食品种数,然后由count参数来输出,并且计算满足条件的单价的总和。

DELIMITER //
CREATE PROCEDURE Pfood_price_count(IN price_infol FLOAT, IN price_info2 FLOAT, OUT count INT)
BEGINDECLARE sum_price FLOAT DEFAULT 0;SELECT COUNT(*), SUM(price) INTO count, sum_price FROM food WHERE price > price_infol AND price < price_info2;SELECT CONCAT('满足条件的食品种数为:', count) AS result;SELECT CONCAT('满足条件的单价总和为:', sum_price) AS result;
END //
DELIMITER ;

(2) 使用CALL语句来调用存储过程。查询价格在2至18之间的食品种数。代码如下:

CALL Pfood_price_count(2, 18, @count);

(3)使用DROP语句删除存储过程Pfood_price_count。代码如下:

DROP PROCEDURE Pfood_price_count; 

(4) 使用存储函数来实现(1)的要求。

DELIMITER //
CREATE FUNCTION Ffood_price_count(price_infol FLOAT, price_info2 FLOAT) RETURNS VARCHAR(100) DETERMINISTIC READS SQL DATA
BEGINDECLARE count INT DEFAULT 0;DECLARE sum_price FLOAT DEFAULT 0;SELECT COUNT(*), SUM(price) INTO count, sum_price FROM food WHERE price > price_infol AND price < price_info2;RETURN CONCAT('满足条件的食品种数为:', count, ',满足条件的单价总和为:', sum_price);
END //
DELIMITER ;

(5)调用存储函数

SELECT Ffood_price_count(2, 18) AS result;

(6)删除存储函数

DROP FUNCTION Ffood_price_count;

2.学校教师管理数据库中的teacherInfo表,其表的定义如下表所示,请完成如下操作。
在这里插入图片描述
向teacherInfo表中插入记录:
1001,‘张龙’,‘男’,‘1984-11-08’,‘北京市昌平区’
1002,‘李梅’,‘女’,‘1970-01-21’,‘北京市海淀区’
1003,‘王一丰’,‘男’,‘1976-10-30’,‘北京市昌平区’
1004,‘赵六’,‘男’,‘1980-06-05’,‘北京市顺义区’

(1)创建名为teachernfo1的存储过程。要求:存储过程teachernfo1有3个参数。输入参数为teacherid和type,输出参数为info。满足:根据编号(teacherid)来查询teachernfo表中的记录。如果type的值为1时,将姓名(name)传给输出参数info;如果type的值为2时,将年龄传给输出参数info;如果type为其他值,则返回字符串“Error”。

DELIMITER //
CREATE PROCEDURE teachernfo1(IN teacherid INT, IN type INT, OUT info VARCHAR(50))
BEGINDECLARE name VARCHAR(20);DECLARE birthday DATETIME;DECLARE age INT;SELECT name, birthday INTO name, birthday FROM teacherInfo WHERE num = teacherid;SET age = YEAR(CURDATE()) - YEAR(birthday);IF type = 1 THENSET info = name;ELSEIF type = 2 THENSET info = age;ELSESET info = 'Error';END IF;
END //
DELIMITER ;

(2)调用存储过程,参数值teacher id为2,type为1。

CALL teachernfo1(2, 1, @info);
SELECT @info;

(3)使用DROP PRODECURE语句来删除存储过程

DROP PROCEDURE teachernfo1;

(4)创建名为teacherinfo2的存储函数。要求:存储过程teacherinfo2有两个参数:teacher id和type。满足:根据编号(teacher id)来查询teacher表中的记录。如果type的值是1时,则返回姓名(name)值;如果type的值是2时,则返回年龄;如果type为其他值,则返回字符串“Error”。

DELIMITER //
CREATE FUNCTION teacherinfo2(teacherid INT, type INT) RETURNS VARCHAR(50)
BEGINDECLARE name VARCHAR(20);DECLARE birthday DATETIME;DECLARE age INT;SELECT name, birthday INTO name, birthday FROM teacherInfo WHERE num = teacherid;SET age = YEAR(CURDATE()) - YEAR(birthday);IF type = 1 THENRETURN name;ELSEIF type = 2 THENRETURN age;ELSERETURN 'Error';END IF;
END //
DELIMITER ;

(5)使用SELECT语句调用teacherinfo2存储函数。

SELECT teacherinfo2(2, 1);

(6)使用DROP FUNCTION语句来删除teacherinfo2存储函数。

DROP FUNCTION teacherinfo2;

三、观察与思考

(1) 什么时候适合通过创建存储过程来实现?
mysql中适合通过创建存储过程来实现的情况包括:执行复杂的数据库操作,提高代码重用性;封装业务逻辑,简化客户端开发;减少网络通信量,提升性能;实施细粒度的权限控制;确保事务的一致性和完整性。

(2) 功能相同的存储过程和存储函数的不同点有哪些?
mysql中存储过程和存储函数的主要不同点在于调用方式、返回值和语句类型。存储过程可以执行复杂逻辑,支持输出参数和多种sql语句类型,适合执行修改数据的操作。而存储函数必须返回单个值,通常用于计算和返回数据,适用于select语句中,作为表达式的一部分。

(3)使用游标对于数据检索的好处有哪些?
使用游标进行数据检索的好处包括:可以逐行处理结果集中的数据,提供更细粒度的控制;适合复杂的数据处理逻辑,如多步骤计算或条件判断;减少内存占用,尤其当处理大量数据时;提高代码的灵活性和可读性。

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

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

相关文章

【进阶篇-Day8:JAVA中递归、异常的介绍】

目录 1、递归的介绍和使用1.1 递归的介绍1.2 案例案例一&#xff1a;案例二&#xff1a;案例三&#xff1a;案例四&#xff1a; 1.3 总结 2、异常的介绍和使用2.1 异常的介绍&#xff1a;&#xff08;1&#xff09;能够看懂异常&#xff08;2&#xff09;异常的体系接口和分类&…

苹果入局,AI手机或将实现“真智能”?

【潮汐商业评论/原创】 “AI应用智能手机不就是现在的AI手机。” 当被问到现阶段对AI手机的看法时&#xff0c;John如是说。“术业有专攻&#xff0c;那么多APP在做AI功能&#xff0c;下载用就是了&#xff0c;也用不着现在换个AI手机啊。” 对于AI手机&#xff0c;或许大多…

Windows安装和使用Doccano标注工具

简介 开源链接&#xff1a;GitHub - doccano/doccano: Open source annotation tool for machine learning practitioners. Open source annotation tool for machine learning practitioners. Doccano是一款开源的文本标注工具&#xff0c;由人工智能公司Hironsan开发并在G…

【算法】代码随想录之数组

文章目录 前言 一、二分查找法&#xff08;LeetCode--704&#xff09; 二、移除元素&#xff08;LeetCode--27&#xff09; 三、有序数组的平方&#xff08;LeetCode--977&#xff09; 四、长度最小的子数组&#xff08;LeetCode--209&#xff09; 五、螺旋矩阵II&#x…

花几千上万学习Java,真没必要!(二)

1、注释&#xff1a; java代码注释分3种&#xff1a; 单行注释&#xff1a;//注释信息 多行注释: /*注释信息*/ 文档注释:/**注释信息*/ public class TestComments {// 这是单行注释&#xff0c;用于注释单行代码或解释代码功能/* 这是多行注释&#xff0c;用于注释多行代码…

Kotlin runCatching try-catch耗时比较

Kotlin runCatching try-catch耗时比较 fun main(args: Array<String>) {val lists arrayListOf("z")val idx 10/***纳秒统计** ns&#xff08;nanosecond&#xff09;&#xff1a;纳秒。一秒的10亿分之一&#xff0c;10的-9次方秒。*   1纳秒0.000001 毫秒…

2024年,搞AI就别卷模型了

你好&#xff0c;我是三桥君 2022年11月30日&#xff0c;OpenAI发布了一款全新的对话式通用人工智能工具——ChatGPT。 该工具发布后&#xff0c;仅用5天时间就吸引了100万活跃用户&#xff0c;而在短短2个月内&#xff0c;其活跃用户数更是飙升至1亿&#xff0c;成为历史上增…

ARP协议介绍与ARP协议的攻击手法

ARP是什么&#xff1f; ARP是通过网络地址&#xff08;IP&#xff09;来定位机器MAC地址的协议&#xff0c;它通过解析网络层地址&#xff08;IP&#xff09;来找寻数据链路层地址&#xff08;MAC&#xff09;的网络传输协议。 对个定义不能理解的话&#xff0c;可以结合 TCP/I…

《恋与深空》2.0上线肉鸽模式,乙游玩家会买账吗?

乙游和肉鸽&#xff0c;看似八竿子打不着的两个赛道&#xff0c;被叠纸给融合起来了。 根据《恋与深空》官方消息&#xff0c;即将在7月15日更新的2.0交错视界版本中&#xff0c;会上线全新常驻玩法“混沌深网”&#xff0c;配置高随机性Roguelike模式&#xff0c;并搭载了管理…

理想文档发布了~一个集合了多个优秀开源项目的在线云文档

两年前我做了一个简单的在线云文档项目&#xff0c;选择了开源的思维导图、白板、流程图、幻灯片等项目&#xff0c;在它们基础上添加了云存储的功能&#xff0c;然后写了一个简单的工作台管理文件夹和文件&#xff1a; 放在了自己的个人网站上使用&#xff0c;同时写了一篇水文…

[web]-代码审计-运维失误

打开页面可以看到如下&#xff1a; 1、查看源代码&#xff0c;发现验证码功能是正常生成的随机的&#xff0c;输入也没有过滤&#xff0c;无法采用爆破。 2、根据题目提示运维失误&#xff0c;使用dirsearch扫描&#xff0c;发现提交的地址check.php, 使用php5、.bak可以打开&…

2.The DispatcherServlet

The DispatcherServlet Spring的Web MVC框架与许多其他Web MVC框架一样&#xff0c;是请求驱动的&#xff0c;围绕一个中央Servlet&#xff08;即DispatcherServlet&#xff09;设计&#xff0c;该Servlet将请求分派给控制器&#xff0c;并提供其他功能以促进Web应用程序的开发…

程序的控制结构——if-else语句(双分支结构)【互三互三】

目录 &#x1f341; 引言 &#x1f341;if-else语句&#xff08;双分支结构&#xff09; &#x1f449;格式1&#xff1a; &#x1f449;功能&#xff1a; &#x1f449;程序设计风格提示&#xff1a; &#x1f449;例题 &#x1f449;格式2&#xff1a; &#x1f449;…

Monaco 使用 ColorProvider

Manco 中可以使用调色板对色值进行修改&#xff0c;首先看一下调色版效果。 调色板是 Monaco-Editor 中一个特别的组件&#xff0c;通过两个方法实现呼出调色板&#xff0c;provideColorPresentations 显示调色窗口&#xff0c;provideDocumentColors 监听页面的变更&#xff0…

如何将libwebsockets库编译为x86架构

在之前的文章中&#xff0c;我们已经详细介绍了如何交叉编译libwebsockets并将其部署到ELF 1开发板上。然而在调试阶段&#xff0c;发现将libwebsockets在Ubuntu环境下编译为x86架构可能更为方便和高效。 通过在主机环境中编译运用x86架构下的libwebsockets库&#xff0c;可以…

阿里ChatSDK使用,开箱即用聊天框

介绍&#xff1a; 效果&#xff1a;智能助理 ChatSDK&#xff0c;是在ChatUI的基础上&#xff0c;结合阿里云智能客服的最佳实践&#xff0c;沉淀和总结出来的一个开箱即用的&#xff0c;可快速搭建智能对话机器人的框架。它简单易上手&#xff0c;通过简单的配置就能搭建出对…

公益快报 | 中科亿海微以企业奖学金为纽带,深化校企合作

近日&#xff0c;为回报母校、激励湖南大学机器人视觉感知与控制技术国家工程研究中心广大学生&#xff0c;中科亿海微电子科技&#xff08;苏州&#xff09;有限公司&#xff08;简称“中科亿海微”&#xff09;捐赠设立企业奖学金。此项奖学金的设立标志着校企合作迈向全方位…

实现组件存储 WinSxS 文件夹解析

目录 背景 目录名的组成 解析目录结构 更新&总结 文章出处链接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/140385969]. 背景 WinSxS 文件夹位于 Windows 文件夹中&#xff0c;例如 C: \Windows\WinSxS。它是 Windows 组件存储文件的位置。 Wind…

idea启动vue项目一直卡死在51%,问题分析及其如何解决

如果你的项目也一直卡在百分之几十&#xff0c;你可以参考下面的方法&#xff0c;试一试能否解决 问题描述&#xff1a; 通过在idea终端中输入命令 npm run serve 启动vue项目&#xff0c;启动进程一直卡在51% 如何解决&#xff1a; 检查 < template > 标签中的html内容…

深度学习中的超参管理方法:argparse模块

在深度学习方法中我们不可避免地会遇到大量超参数如&#xff08;batch_size、learning_rate等&#xff09;。不同的超参数组合可以得到不同的训练/测试结果。所以在训练和测试过程中我们需要不断调整超参数获得理想的结果&#xff08;炼丹&#xff09;&#xff0c;如果每一次去…