MySQL-存储过程(头歌数据库实验题)

(学校数据库课程的头歌平台实验题,根据自己理解编写,希望对正在学的人有启发作用和借鉴帮助,不喜勿喷,有错请联系改正)

实验

存储过程:输入1

任务描述:

本关任务:编写一个存储过程,输入起始价格、价格分段长度、价格分段数,将Books表中处于某一区间段的价格数mSalePrice改为所在区间的起始数。比如输入0,5,10,则处理0-50的价格总区间,分段区间为[0,5),[5,9)....如果价格为7,则位于区间[5,9),将价格设置为5。建议使用循环语句进行编写。

AC代码:

  USE purchase_book;#请在此处添加实现代码
########## Begin ##########
delimiter $$create procedure MYPROC(in init decimal, in len decimal, in number decimal)
begindeclare i int default 0;declare interval_start decimal;declare interval_end decimal;-- 循环遍历每个区间while i < number do-- 计算当前区间的起始和结束价格set interval_start = init + len * i;set interval_end = init + len * (i + 1); -- 减去0.01以确保区间是开区间-- 更新Books表中的价格update booksset mSalePrice = interval_startwhere mSalePrice >= interval_start and mSalePrice < interval_end;-- 增加循环计数set i = i + 1;end while;
end$$delimiter ;########## End ##########  

存储过程:输入2

任务描述:

本关任务:编写一个存储过程。现有数据表books(cBookID char(10),mSalePrice decimal,cTypeID char(5))和booktype(cTypeID char(5),vTypeName varchar(100))。vTypeName包括(科技、经管、外语、文学、童书)五类书籍类别。输入一个书籍类别和一个标志符号,如果输入0,则把输入书籍类别价格乘以0.5,如果输入1,则将除了输入书籍类别的书籍的价格乘以0.5。存储过程声明如下:
create procedure MYPROC(in bookType varchar(100), in flag int)

AC代码:

  USE purchase_book;#请在此处添加实现代码
########## Begin ##########
delimiter $$create procedure MYPROC(in init decimal, in len decimal, in number decimal)
begindeclare i int default 0;declare interval_start decimal;declare interval_end decimal;-- 循环遍历每个区间while i < number do-- 计算当前区间的起始和结束价格set interval_start = init + len * i;set interval_end = init + len * (i + 1); -- 减去0.01以确保区间是开区间-- 更新Books表中的价格update booksset mSalePrice = interval_startwhere mSalePrice >= interval_start and mSalePrice < interval_end;-- 增加循环计数set i = i + 1;end while;
end$$delimiter ;########## End ##########  

存储过程:输出1

任务描述:

本关任务:编写一个存储过程。现有数据表books(cBookID char(10),vBookName varchar(100))以及
evaluation(cEvaluationID char(36),cBookID char(10),comment varchar(2000)
comment属性包括(非常好,很好,好,一般,差)。现在需要分别输出“非常好”最多的书名和相应“非常好”评价的数量到输出变量中。存储过程声明如下:
create procedure MYPROC(out bookname  varchar(100), out eval int)

AC代码:

  USE purchase_book;#请在此处添加实现代码
########## Begin ##########
delimiter $$create procedure MYPROC(out bookname varchar(100), out eval int)
beginselect b.vBookName, count(*) as count into bookname, evalfrom evaluation einner join books b on e.cBookID = b.cBookIDwhere e.comment = '非常好'group by b.vBookNameorder by count desclimit 1;
end$$delimiter ;
########## End ##########  

存储过程:输入输出1

任务描述:

本关任务:编写一个存储过程。现有数据表books(cBookID char(10),vBookName varchar(100),mSalePrice decimal, siQuantity smallint)。现在需要输入一个bookname varchar 变量和number int变量,找到价格小于bookname的、从大到小排在第number位的书籍,注意limit下标从0开始。然后将对应的vBookName赋值给bookname、siQuantity赋值给number。如果书籍不存在则给bookname赋值“not existed”。存储过程声明如下:
create procedure MYPROC(inout bookname  varchar(100), inout number int)

AC代码:

USE purchase_book;DELIMITER //CREATE PROCEDURE MYPROC(INOUT bookname VARCHAR(100), INOUT number INT)
BEGINDECLARE found_book_name VARCHAR(100);DECLARE found_quantity SMALLINT;DECLARE book_price DECIMAL;DECLARE offset INT DEFAULT 0;-- 获取输入 bookname 对应的书籍价格SELECT mSalePrice INTO book_priceFROM booksWHERE vBookName = bookname;-- 检查是否找到了对应的书籍价格IF book_price IS NULL THENSET bookname = 'not existed';SET number = 1;ELSE-- 计算LIMIT的起始值SET offset = number - 1;-- 查找价格小于输入 bookname 对应的书籍价格,从大到小排在第 number 位的书籍   SELECT vBookName, siQuantity INTO found_book_name, found_quantityFROM booksWHERE mSalePrice < book_priceORDER BY mSalePrice DESCLIMIT offset, 1;IF found_book_name IS NULL THENSET bookname = 'not existed';SET number = NULL;ELSESET bookname = found_book_name;SET number = found_quantity;END IF;END IF;
END //DELIMITER ;

因为limit语句第一个参数不能用表达式,所以用来一个offset变量来存储number-1,表示忽略前number-1个数据,返回后面的第一个数据。

存储过程:输入输出2

任务描述:

本关任务:编写一个存储过程。现有数据表books(cBookID char(10),vBookName varchar(100),mSalePrice decimal, siQuantity smallint)。现在需要输入一个价格变量price,找到离该价格最接近的价格和对应书籍,将找到的价格赋值给price。存储过程声明如下:
create procedure MYPROC(inout price decimal, out bookname varchar(100))

AC代码:

  USE purchase_book;#请在此处添加实现代码
########## Begin ##########
DELIMITER $$CREATE PROCEDURE MYPROC(INOUT price DECIMAL, OUT bookname VARCHAR(100))
BEGINselect mSaleprice, vBookName into price, booknamefrom booksorder by abs(price - mSaleprice)limit 1;END $$DELIMITER ;
########## End ##########  

这题主要是要想到用绝对值来排序就很好做了。

自主练习

存储过程:输入

任务描述:

本关任务:编写一个存储过程,输入基本销量baseQty,将销量(siQuantity)小于基本baseQty的商品的售价mSalePrice乘以cut数值。存储过程声明如下:
create procedure MYPROC(in baseQty decimal, in cut decimal(10,2))

AC代码:

USE purchase_book;#请在此处添加实现代码
########## Begin ##########
delimiter $$create procedure MYPROC(in baseQty decimal, in cut decimal(10,2))
beginupdate booksset mSalePrice = mSalePrice * cutwhere siQuantity < baseQty;
end$$delimiter ;
########## End ##########  

存储过程:输出

任务描述:

本关任务:编写一个存储过程,针对表books,如果siQuantity在0-99,则mSalePrice乘以0.9,如果siQuantity在100-499,则mSalePrice乘以1.1,否则乘以1.2。将书籍平均价格输出到price。存储过程声明如下:
create procedure MYPROC(out price decimal)

AC代码:

USE purchase_book;#请在此处添加实现代码
########## Begin ##########delimiter $$create procedure MYPROC(out price decimal)
beginupdate books set mSalePrice = mSalePrice*0.9where 0 <= siQuantity AND siQuantity <= 99;update books set mSalePrice = mSalePrice*1.1where 100 <= siQuantity AND siQuantity <= 499;update books set mSalePrice = mSalePrice*1.2where siQuantity<0 or siQuantity>=500;select avg(mSalePrice) into pricefrom books;end$$delimiter ;
########## End ##########  

注意不能用0 <= siQuantity <= 99这种形式,这在Sql语法中是错误的。

存储过程:输入输出

任务描述:

本关任务:编写一个存储过程。现有数据表books(cBookID char(10),vBookName varchar(100),mSalePrice decimal, siQuantity smallint)和orderdetail(cOrderNo char, cBookID char, mSalePrice decimal, siQty smallint,mBookCost decimal),orders(cOrderNo,mTotalCost,vPayType varchar(20))。现在需要输入vPayType类型变量(包括 :网银、支付宝、微信),将对应的订单的总销量价值和最大订单销量价值取出放入变量totalCost和maxCost中。存储过程声明如下:
create procedure MYPROC(in paytype  varchar(20), out totalCost int, out maxCost int)

AC代码:

USE purchase_book;#请在此处添加实现代码
########## Begin ##########
delimiter $$create procedure MYPROC(in paytype  varchar(20), out totalCost int, out maxCost int)
beginselect sum(mTotalCost), max(mTotalCost) into totalCost, maxCostfrom orderswhere vPayType = paytype;
end$$delimiter ;
########## End ##########  

 (居然mTotalCost是销量)。。


(如果有帮助请点赞或评论支持,有问题请指正,其他问题请评论交流...) 

都看到这里了真不点个赞吗

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

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

相关文章

GitLab 服务变更提醒:中国大陆、澳门和香港用户停止提供服务(GitLab 服务停止)

目录 前言 一. 变更详情 1. 停止服务区域 2. 邮件通知 3. 新的服务提供商 4. 关键日期 5. 行动建议 二. 迁移指南 三. 注意事项 四. 相关推荐 前言 近期&#xff0c;许多位于中国大陆、澳门和香港的 GitLab 用户收到了一封来自 GitLab 官方的重要通知。根据这封邮件…

mysql基础快速入门

通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改DQL: 数据查询语言&#xff0c;用来查询数据库中表的记录DCL: 数据控制语言&#xff0c;用来创建数…

Python文件读写在“简易记事本”项目中的应用

Python文件读写在“简易记事本”项目中的应用 文件读写是“简易记事本”项目实现数据持久化的关键部分。在本节中&#xff0c;我们将逐步拆解记事本的功能&#xff0c;详细讲解与文件读写相关的代码&#xff0c;并结合实际操作帮助读者更好地理解文件操作的核心知识点。 功能…

【Agent】AutoGen Studio2.0开源框架-UI层环境安装+详细操作教程(从0到1带跑通智能体AutoGen Studio)

&#x1f4a5; 欢迎来到我的博客&#xff01;很高兴能在这里与您相遇&#xff01; 首页&#xff1a;GPT-千鑫 – 热爱AI、热爱Python的天选打工人&#xff0c;活到老学到老&#xff01;&#xff01;&#xff01;导航 - 人工智能系列&#xff1a;包含 OpenAI API Key教程, 50个…

三层交换机配置

一&#xff0c;三层交换 概念&#xff1a;三层交换技术就是&#xff1a;二层交换技术三层转发技术(路由器功能)。它解决了局域网中网段划分之后&#xff0c;网段中子网必须依赖路由器进行管理的局面&#xff0c;解决了传统路由器低速&#xff0c;复杂所造成的网络瓶颈问题。 …

js单例模式

单例模式是一种常见的设计模式&#xff0c;在JavaScript中也有广泛应用&#xff0c;以下是关于它的详细介绍&#xff1a; 定义 单例模式是一种创建型设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。在JavaScript中&#xff0c;…

【Golang 面试题】每日 3 题(六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

SQL Server数据库多主模式解决方案

SQL Server 本身并不直接支持多主模式(Multi-Master Replication),即多个数据库实例可以同时进行写操作,并且这些更改会自动同步到其他实例。不过,SQL Server 提供了多种高可用性和复制解决方案,可以实现类似多主模式的功能。以下是几种常见的方法: 1. Always On 可用性…

连锁餐饮行业数据可视化分析方案

引言 随着连锁餐饮行业的迅速发展&#xff0c;市场竞争日益激烈。企业需要更加精准地把握运营状况、消费者需求和市场趋势&#xff0c;以制定科学合理的决策&#xff0c;提升竞争力和盈利能力。可视化数据分析可以帮助连锁餐饮企业整合多源数据&#xff0c;通过直观、动态的可…

Zookeeper JavaAPI操作(Curator API常用操作)

构建项目 zk版本&#xff1a;3.5.7&#xff0c;引入4.0.0的curator版本&#xff0c;Curator依赖的版本只能比zookeeper依赖的版本高。 Curator简单介绍 Curator是Netflix公司开源的一套zookeeper客户端框架&#xff0c;解决了很多Zookeeper客户端非常底层的细节开发工作&…

可搜索的下拉选择框:filterable属性详解

在前端开发中&#xff0c;下拉选择框&#xff08;Dropdown Select&#xff09;是一个常见的UI组件&#xff0c;它允许用户从一组预定义的选项中选择一个或多个值。然而&#xff0c;当选项数量较多时&#xff0c;手动查找特定的选项可能会变得繁琐。为了解决这个问题&#xff0c…

精选9个自动化任务的Python脚本精选

大家好&#xff0c;我是老邓&#xff0c;今天我们来一起学习如何用Python进行一些常见的自动化操作&#xff0c;涉及文件处理、网络交互等实用技巧。即使你没有任何Python基础也没关系&#xff0c;我会用最通俗易懂的语言来讲解。 1. 对目录中的文件进行排序 import osdef so…

滑动窗口 + 算法复习

维护一个满足条件的窗口大小&#xff0c;然后进行双指针移动 1.最长子串 题目链接&#xff1a;1.最长子串 - 蓝桥云课 #include<bits/stdc.h> #define int long long using namespace std; string s; int k; signed main() {int max_len0,left0;cin>>s>>k;…

PDF书籍《手写调用链监控APM系统-Java版》第9章 插件与链路的结合:Mysql插件实现

本人阅读了 Skywalking 的大部分核心代码&#xff0c;也了解了相关的文献&#xff0c;对此深有感悟&#xff0c;特此借助巨人的思想自己手动用JAVA语言实现了一个 “调用链监控APM” 系统。本书采用边讲解实现原理边编写代码的方式&#xff0c;看本书时一定要跟着敲代码。 作者…

关于Vue的子组件改变父组件传来的值

一、组件直接传值 大家都知道父子组件传值的方案&#xff0c;有以下几个&#xff0c;不再详细敖述 Props&#xff1a;父组件向子组件传递数据 $emit&#xff1a;子组件通过自定义事件向父组件传递数据 .sync修饰符&#xff1a;一个方便且强大的工具&#xff0c;可以简化父子组…

Flink的Watermark水位线详解

一、Flink的时间语义 Flink有如下三种时间语义&#xff1a; Flink的三种时间语义-CSDN博客 在实际应用中&#xff0c;一般会采用事件时间语义。而正如前面所说的&#xff0c;事件时间语义需要等窗口的数据全部到齐了&#xff0c;才能进行窗口计算。那么&#xff0c;什么时候数…

ES学习Promise对象(九)

这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器&#xff0c;里面保存着某个未来才会结束的事件&#xff08;通常是一个异步操作&#xff09;的结果。Promise 是一个对象&#xff0c;Promise 提供统一…

Kibana:LINUX_X86_64 和 DEB_X86_64两种可选下载方式的区别

最近需要在vm&#xff08;操作系统是 Ubuntu 22.04.4 LTS&#xff0c;代号 Jammy。这是一个基于 x86_64 架构的 Linux 发行版&#xff09;上安装一个7.17.8版本的Kibana&#xff0c;并且不采用docker方式。 在下载的时候发现有以下两个选项&#xff0c;分别是 LINUX_X86_64 和 …

CMake 构建项目并整理头文件和库文件

本文将介绍如何使用 CMake 构建项目、编译生成库文件&#xff0c;并将头文件和库文件整理到统一的目录中以便在其他项目中使用。 1. 项目结构 假设我们正在构建一个名为 rttr 的开源库&#xff0c;初始的项目结构如下&#xff1a; D:\WorkCode\Demo\rttr-master\|- src\ …

【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)

1.问题描述&#xff1a; 人脸活体检测返回上一页App由沉浸式变为非沉浸式多了上下安全区域。 解决方案&#xff1a; 检测结束后需要自己去设置沉浸式配置。 2.问题描述&#xff1a; Vision Kit文字识别是本地识别&#xff0c;还是上传至服务器&#xff0c;由服务器来识别文…