第8关:定义一个名为PROC_AVGWEIGHT的有参数存储过程

USE mydata;
#请在此处添加实现代码
########## Begin ##########
DELIMITER $
CREATE PROCEDURE PROC_AVGWEIGHT(IN SNO VARCHAR(10), IN JNO VARCHAR(10), OUT AVG_WEIGHT INT)
BEGINSELECT ROUND(SUM(P.WEIGHT * SPJ.QTY) / SUM(SPJ.QTY)) INTO AVG_WEIGHTFROM PJOIN SPJ ON P.PNO = SPJ.PNOWHERE SPJ.SNO = SNO AND SPJ.JNO = JNO;
END;$
DELIMITER ;
CALL PROC_AVGWEIGHT('S2', 'J2', @AVG_WEIGHT);
SELECT @AVG_WEIGHT AS '@AVG_WEIGHT';########## End ########## 

任务描述

定义一个名为PROC_AVGWEIGHT的有参数存储过程,要求求出“用户输入的供应商”提供给“用户输入的工程”的“对应所有零件的平均重量”,并将平均重量结果通过输出变量AVG_WEIGHT返回,平均重量的输出取整,按照输入供应商为S2,工程为J2,执行上述存储过程。(注意要考虑零件数量)

相关知识

1、零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。 P表如下图:

,

现已构建P表,结构信息如下:

,

2、供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,标识某供应商 供应某种零件 给某工程项目的数量为QTY。 SPJ表如下图:

,

现已构建SPJ表,结构信息如下:

,

3、存储过程定义 定义一个存储过程语句的语法格式如下:

 
  1. CREATE [OR REPLACE ] PROCEDURE <模式名.存储过程名> [WITH ENCRYPTION]
  2. [(<参数名> <参数模式> <参数数据类型> [<默认值表达式>]
  3. {,<参数名> <参数模式> <参数数据类型> [<默认值表达式>] })]
  4. AS | IS
  5. [<说明语句端段>]
  6. BEGIN
  7. <执行语句段>
  8. [Exception
  9. <异常处理语句段>]
  10. END;

其中: (1)<模式名.存储过程名>:指明被创建的存储过程的名称。 (2)<参数名>:指明存储过程参数的名称。 (3) WITH ENCRYPTION:为可选项,如果指定 WITH ENCRYPTION 选项,则对 BEGIN 到 END 之间的语句块进行加密,防止非法用户查看其具体内容,加密后的存储过程或存储函数的定义可在 SYS.SYSTEXTS 系统表中查询。 (4)<参数模式>:指明存储过程参数的输入/输出方式。参数模式可设置为 IN、OUT 或 IN OUT(OUT IN),默认为 IN 类,IN 表示向存储过程传递参数,OUT 表示从存储过程返回参数。而 IN OUT 表示传递参数和返回参数。 (5)<参数数据类型>:指明存储过程参数的数据类型。 (6)<说明语句端段>:由变量、游标和子程序等对象的申明构成。 (7)<执行语句段>:由 SQL 语句和过程控制语句构成的执行代码。 (8)<异常处理语句段>:各种异常的处理程序,存储过程执行异常时调用,可默认。 注意:使用该语句的用户必须是 DBA 或该存储过程的拥有者且具有 CREATE PROCEDURE 数据库权限的用户;参数的数据类型只能指定变量类型,不能指定长度。

相关操作① DECLARE定义变量 DECLARE用于定义变量,在存储过程和函数中通过declare定义变量在BEGIN...END中,且在语句之前,定义变量语法为:

 
  1. DECLARE 变量名 变量类型 [DEFAULT 初始化值];

例如:

 
  1. DECLARE a, b INT DEFAULT 5;

② SET定义用户变量 SET语句可用于向系统变量或用户变量赋值,用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效,针对用户变量的定义如下:

 
  1. SET @var_name = expr [, @var_name = expr] ...

例如:

 
  1. SET @name = 'abc', @weight = 20;

③ 存储过程调用:CALL命令 过程体调用CALL sp_name[(传参)]; ④ 查看存储过程:SHOW PROCEDURE STATUS命令 SHOW PROCEDURE STATUS where db='数据库名'; 命令查看对应数据库中存在哪些存储过程 ⑤ 存储过程修改:ALTER PROCEDURE命令 MySQL 中修改存储过程的语法格式如下: ALTER PROCEDURE 存储过程名 [ 特征 ... ] 注意:ALTER PROCEDURE 语句用于修改存储过程的某些特征。如果要修改存储过程的内容,可以先删除原存储过程,再以相同的命名创建新的存储过程;如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。 ⑥ 存储过程删除:DROP PROCEDURE命令 存储过程被创建后,就会一直保存在数据库服务器上,直至被删除。当 MySQL 数据库中存在废弃的存储过程时,我们需要将它从数据库中删除。 MySQL 中使用 DROP PROCEDURE 语句来删除数据库中已经存在的存储过程。语法格式如下: DROP PROCEDURE [ IF EXISTS ] <过程名> 语法说明如下: • 过程名:指定要删除的存储过程的名称。 • IF EXISTS:指定这个关键字,用于防止因删除不存在的存储过程而引发的错误。 注意:存储过程名称后面没有参数列表,也没有括号,在删除之前,必须确认该存储过程没有任何依赖关系,否则会导致其他与之关联的存储过程无法运行。 ⑦ OUT参数输出:SELECT @变量名 例:存储过程create procedure out_param(out p_out int);调用后输出OUT参数方法如下: CALL out_param(@pp_out); SELECT @pp_out; 注意:pp_out可与 p_out同名 ⑧ 修改命令结束符:DELIMITER命令

,

⑨ 使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量。SELECT …INTO语句的语法格式如下:

 
  1. SELECT col_name[,...] INTO var_name[,...] table_expr

col_name:要从数据库中查询的列字段名; var_name:变量名,列字段名按照在列清单和变量清单中的位置对应,将查询得到的值赋给对应位置的变量; table_expr:SELECT语句其余部分,包括可选的FROM子句和WHERE子句。 需要注意的是,在使用SELECT …INTO语句时,变量名不能和数据表中的字段名不能相同,否则会出错。 例如:

,

⑩ 将变量值返回给调用者 在存储过程中定义的变量,经过一系列的处理之后,结果值可能需要返回给存储过程调用者。那么如何返回呢?方便的做法是使用SELECT语句将变量作为结果集返回,例如:

,

创建存储过程样例:创建一个存储过程,查询某用户ID在T表中的用户名

,


开始你的任务吧,祝你成功!

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

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

相关文章

WordPress付费阅读、付费下载、付费复制插件推荐

如果我们是用WordPress内核程序&#xff0c;我们可以用插件解决这个功能。现在市面上小编有看到三款WordPress内容付费或者是有的称作WordPress会员插件&#xff0c;可以实现WordPress付费阅读、付费下载&#xff0c;甚至付费复制的功能。在这几个插件中&#xff0c;简单的盘点…

23.Python 图形化界面编程

目录 1.认识GUI和使用tkinter2.使用组件2.1 标签2.2 按钮2.3 文本框2.4 单选按钮和复选按钮2.5 菜单和消息2.6 列表框2.7 滚动条2.8 框架2.9 画布 3. 组件布局4.事件处理 1.认识GUI和使用tkinter 人机交互是从人努力适应计算机&#xff0c;到计算机不断适应人的发展过程&#…

外包干了2年,技术退步明显。。。

前言 简单的说下&#xff0c;我大学的一个同学&#xff0c;毕业后我自己去了自研的公司&#xff0c;他去了外包&#xff0c;快两年了我薪资、技术各个方面都有了很大的提升&#xff0c;他在外包干的这两年人都要废了&#xff0c;技术没一点提升&#xff0c;学不到任何东西&…

智加科技获全国首张重卡无人驾驶开放道路测试牌照

2023年12月1日&#xff0c;智加科技获得苏州市智能网联汽车无人化测试牌照。该牌照也是江苏省及国内首张无人重卡开放高速公路全路段全场景全息路网&#xff08;S17苏台高速&#xff09;道路测试牌照。 该重卡无人驾驶开放道路测试牌照&#xff0c;经由苏州市智能网联汽车联席小…

Redis--12--Redis分布式锁的实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Redis分布式锁最简单的实现如何避免死锁&#xff1f;锁被别人释放怎么办&#xff1f;锁过期时间不好评估怎么办&#xff1f;--看门狗分布式锁加入看门狗 redissonRe…

VT-VRPA2-1-1X/V0/T5控制4WRE6比例方向阀放大板

带阀芯位移反馈不带集成式放大器比例方向阀控制放大器&#xff0c;替代力士乐同型号产品&#xff0c;可以完全互换使用&#xff1b;适用于控制力士乐系列带电位置反馈的4WRE6通径和4WRE10通径2X系列比例方向阀&#xff1b;0~10V、4~20mA指令控制信号任意可选&#xff1b;直接安…

还在Wins 11怀念10的右键单击菜单?别担心,可通过注册表来实现

到目前为止&#xff0c;Windows 11最令人讨厌的新“功能”是右键单击任何内容时会出现截断的上下文菜单。以前版本的Windows显示了你的所有选项&#xff0c;包括可以打开文件的不同程序&#xff0c;而新菜单仅限于少数选项&#xff0c;不一定是你想要的。 例如&#xff0c;当我…

IDEA专栏—重装IDEA的配置

文章目录 1、maven路径2、默认文件路径3、插件4、导包顺序5、快捷键6、调整配置插件 1、maven路径 2、默认文件路径 3、插件 4、导包顺序 import static all other imports <blank line> import java.* import javax.* <blank line> import all other imports <…

6-66.时间

本题要求输入小时、分钟和秒数&#xff0c;并将其输出。针对时间表示中出现的异常进行处理。例如小时数不应超过23&#xff0c;分钟不应超过59&#xff0c;秒数不应超过59。此外&#xff0c;以上三个变量均应大于等于0。 输入样例&#xff1a; 在这里给出三组输入。例如&…

Ubuntu20.04部署TVM流程及编译优化模型示例

前言&#xff1a;记录自己安装TVM的流程&#xff0c;以及一个简单的利用TVM编译模型并执行的示例。 1&#xff0c;官网下载TVM源码 git clone --recursive https://github.com/apache/tvmgit submodule init git submodule update顺便完成准备工作&#xff0c;比如升级cmake版本…

java原子类型

AtomicBoolean AtomicInteger AtomicLong AtomicReference<V> StringBuilder - 不是原子类型。StringBuilder 是 java.lang 包下的类 用法&#xff1a;无需回调改变数值

6.7 Windows驱动开发:内核枚举LoadImage映像回调

在笔者之前的文章《内核特征码搜索函数封装》中我们封装实现了特征码定位功能&#xff0c;本章将继续使用该功能&#xff0c;本次我们需要枚举内核LoadImage映像回调&#xff0c;在Win64环境下我们可以设置一个LoadImage映像加载通告回调&#xff0c;当有新驱动或者DLL被加载时…

Best Rational Approximation ——二分

许多微控制器没有浮点单元&#xff0c;但确实有一个&#xff08;合理&#xff09;快速整数除法单元。在这些情况下&#xff0c;使用有理值来近似浮点常数可能是值得的. 例如&#xff0c;355/113 3.1415929203539823008849557522124 是 π 3.14159265358979323846 一个很好的近…

.net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法

文章目录 .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法详细报错内容解决方案修改数据修改表修改字段 .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法 详细报错内容 System.NotSupportedException…

2024年美国大学生数学建模竞赛(MCM/ICM)论文写作方法指导

一、前言 谈笑有鸿儒&#xff0c;往来无白丁。鸟宿池边树&#xff0c;僧敲月下门。士为知己者死&#xff0c;女为悦己者容。吴楚东南坼&#xff0c;乾坤日夜浮。剪不断&#xff0c;理还乱&#xff0c;是离愁&#xff0c;别是一番滋味在心头。 重要提示&#xff1a;优秀论文的解…

【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目

解决idea至少创建jdk17项目 问题idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗?解决 问题 idea现在只能创建最少jdk17&#xff0c;不能创建java8了吗? 我本来以为是 IDEA 版本更新导致的 Bug&#xff0c;开始还没在意。 直到我今天自己初始化项目时才发现&…

免费文章采集工具使用,批量文章自动伪原创工具

在互联网的浩瀚海洋中&#xff0c;获取高质量原创文章是网站生存与发展的关键。而文章采集工具应运而生&#xff0c;成为许多创作者和站长的得力助手。正是这些工具的出现&#xff0c;让文章采集变得更加便捷高效。 免费文章采集工具 免费的文章采集工具。这些工具通常提供基…

可用的镜像 yum 源

目录 ftp.sjtu.edu.cn 镜像 yum 源centos 的镜像 yum 源 mirrors.sohu.comcentos 的镜像 yum 源 mirrors.163.comcentos 的镜像 yum 源 ftp.sjtu.edu.cn 镜像 yum 源 镜像 yum 源地址 &#xff1a; http://ftp.sjtu.edu.cn/centos/ centos 的镜像 yum 源 http://ftp.sjtu.edu…

Qt 网络通信

获取本机网络信息 &#xff08;1&#xff09;在 .pro 文件中加入 QT network&#xff08;2&#xff09; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QLabel> #include <QLineEdit> #include <QPu…

QT学习_16_制作软件安装包

1、准备软件exe及其运行环境 参考&#xff1a;Qt学习_12_一键生成安装包_江湖上都叫我秋博的博客-CSDN博客 这篇博客记录了&#xff0c;如何用window的脚本&#xff0c;一键生成一个可以免安装的软件压缩包&#xff0c;解压缩后&#xff0c;点击exe文件就可以直接运行。 这一…