59、mysql存储过程

存储过程

一、存储过程:

1.1、存储过程的概念

概念:完成特定功能的sql语句的集合。把定义好的sql集合在一个特定的sql的函数当中

每次执行调用函数即可。还可以实现传参的调用。

1.2、存储过程的语法:

delimiter $$
##delimiter开始和结束的语法,$$标志位,可以自定义,不要用数字开头,不要用汉字不能使用特殊字符开头。
create procedure test1()
BEGINSELECT * FROM info1;
end $$
delimiter;show procedure status where db='test1';SHOW procedure status LIKE 'test1';#查看存储过程的名称call test1;#执行begin里面语句#更新begin里面的语句,需要重新创建新的存储过程
create procedure test2()
BEGINSELECT * FROM info1;UPDATE info1 SET high=200 where id = 1;
end $$
delimiter;
call test2;

1.2.1、存储过程传参

in 传入参数,调用者向存储过程传入值

delimiter $$
##delimiter开始和结束的语法,$$标志位,可以自定义,不要用数字开头,不要用汉字不能使用特殊字符开头。
create procedure test6(in uname char(10))
BEGINSELECT * FROM info1 where name = uname;
end $$
delimiter;
call test6('fg');

1.2.2、out 输出参数 存储过程向调用者传出值 传出单个值

delimiter $$
create procedure test7(out num INT)
BEGINset num=100;
end $$
delimiter;
call test7(@num);
select @num;
CREATE table info1 (id int(4));
insert into info2 value(@num);

1.2.3、out 输出参数 存储过程向调用者传出值 传出多个值

delimiter $$
create procedure test8 (out id int,out name char(3),out high int,out address char(20))
BEGIN
set id=5;
set name='王心凌';
set high=185;
set address='幸云教育';
end $$
delimiter;call test8(@id,@name,@high,@address)
select @id,@name,@high,@address;insert into info1 value(@id,@name,@high,@address);

1.2.4、inout 输入输出,既可以表示存储过程向调用者传出,也可以表示用户向存储过程传入值

delimiter $$
create procedure test10 (inout str varchar(20))
BEGIN
select str;
#在存储过程中引用变量无须加@
set str=CONCAT(str,'str_test1');
#替换,把字符串进行替换。
select str;
end $$
delimiter;set @str='蔡';
CALL test9(@str);delimiter $$
create procedure test10 (inout str varchar(20))
BEGIN
select str;
#在存储过程中引用变量无须加@
set str=CONCAT(str,'str_test1');
#替换,把字符串进行替换。
select str;
end $$
delimiter;set @str='蔡';
CALL test9(@str);UPDATE info1 set name=@str where id = 2 ;delimiter $$
create procedure test11 (inout str varchar(20))
BEGIN
select str;
#在存储过程中引用变量无须加@
set str=CONCAT(str);
#替换,把字符串进行替换。
select str;
end $$
delimiter;set @str='蔡';
CALL test11(@str);UPDATE info1 set name=@str where id = 2 ;
UPDATE info1 set name=@str where id = 1 ;

1.2.5、inout 输入输出,既可以表示存储过程向调用者传出,也可以表示用户向存储过程传入值

delimiter $$
create procedure test1 (INOUT ht varchar(20))
BEGIN
set ht=ht+10;
end $$
delimiter;
set @ht=185;
call test1(@ht);
UPDATE info1 set high=@ht where id =2 ;

1.2.6、存储过程中的控制语句

delimiter $$
create procedure test12 (inout num INT)
BEGIN
if num >=10 THEN
set num=num-5;
ELSE
set num=num*2;
end IF;
END $$
delimiter;set @num=19
CALL test12(@num);UPDATE info1 set id=@num where high = 200 ;
范围:
delimiter $$
create procedure test14 (INOUT SCORE INT,OUT grade varchar(255))
BEGIN
if score between 85 and 100 THEN
set grade='优秀';
ELSEIF score between 60 and 84 then 
set grade='及格';
ELSE
set grade='不及格';
end if;
END $$
delimiter;set @score=70;
call test14(@score,@grade)
CREATE table info3(
id INT,
score int,
grade char(20)
);
insert into info3 value(6,@score,@grade);

1.2.7、存储过程的循环语句

delimiter $$
create procedure test2 (OUT result INT)
BEGIN
DECLARE a INT;
declare i int;
set a=10;
set i=1;
while i<=10 DO
set a=a+10;
SET i=i+1;
end WHILE;
set result = a;
END $$
delimiter;set @result=110;
call test2(@result);
select @result;delimiter $$
create procedure test4 (inout result INT)
BEGIN
declare a int; 
declare i int;
set a=result;
set i=1;
while i<=10
DO
set a=a+10;
set i=i+1;
end while;
set result = a;
end $$
delimiter;set @result=110;
call test4(@result);
select @result;

1.3、存储过程的作用

执行速度比sql语句执行速度更快,执行效率也更高。

客户端可以随时调用发放,也可以随后修改。

可以对数据库做任何操作。

二、课后作业

题目需求根据订单号,求出订单总和

#订单表
CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,total_amount DECIMAL(10, 2)
);
#订单货表
CREATE TABLE order_items (order_item_id INT PRIMARY KEY,order_id INT,product_id INT,quantity INT,price DECIMAL(10, 2)
);
INSERT INTO orders (order_id, customer_id, order_date, total_amount) 
VALUES(1, 101, '2024-07-20', 0.00),
(2, 102, '2024-07-21', 0.00);
INSERT INTO order_items 
(order_item_id, order_id, product_id, quantity, price) 
VALUES(1, 1, 1001, 2, 50.00),
(2, 1, 1002, 1, 30.00),
(3, 2, 1001, 1, 50.00),
(4, 2, 1003, 3, 20.00);delimiter $$
CREATE procedure test1() 
BEGIN 
UPDATE orders a SET a.total_amount = (  
##更新订单表的总额,利用order_id相同,别名,给oeders表里的total_amount赋值
SELECT SUM(quantity * price)  
FROM order_items b 
##对订单数量和价格进行求和 ,以便下一步赋值,下面的通过订单号相同order_id条件进行筛选
WHERE b.order_id = a.order_id 
##更新订单表的总额,利用order_id相同,别名,给oeders表里的total_amount赋值 
) ;
END $$
delimiter;call test1();
SELECT * from orders;

在这里插入图片描述

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

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

相关文章

Visual Studio 2022新建 cmake 工程测试 tensorRT 自带样例 sampleOnnxMNIST

1. 新建 cmake 工程 vs2022_cmake_sampleOnnxMNIST_test( 如何新建 cmake 工程&#xff0c;请参考博客&#xff1a;Visual Studio 2022新建 cmake 工程测试 opencv helloworld ) 2. 删除默认生成的 vs2022_cmake_sampleOnnxMNIST_test.h 头文件 3. 修改默认生成的 vs2022_cma…

Docker简单快速入门

1. 安装Docker 基于 Ubuntu 24.04 LTS 安装Docker 。 # 更新包索引并安装依赖包 sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common# 添加Docker的官方GPG密钥并存储在正确的位置 curl -fsSL https://mirror…

叮!2024 龙蜥操作系统大会议题征集正式启动

定啦&#xff01;2024 龙蜥操作系统大会&#xff08;OpenAnolis Conference&#xff0c;以下简称“龙蜥大会”&#xff09;将于 2024 年 8 月 30 日在北京中关村国家自主创新示范区会议中心盛大召开。 2024 龙蜥大会由中关村科学城管委会、海淀区委网信办、中国开源软件推进联…

Python从0到100(四十三):数据库与Django ORM 精讲

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Arduino学习笔记1——IDE安装与起步

一、IDE安装 去浏览器直接搜索Arduino官网&#xff0c;点击Software栏进入下载界面&#xff0c;选择Windows操作系统&#xff1a; 新版IDE下载不需要提前勾选所下载的拓展包&#xff0c;下载好后直接点击安装即可。 安装好后打开Arduino IDE&#xff0c;会自动开始下载所需的…

World of Warcraft [CLASSIC] Timebadge

游戏币【每个服务器实时金价不一样&#xff0c;本例子是5000-6000金】 1枚【魔兽世界时光徽章】 30天游戏时间。 5760金币游戏币&#xff0c;策划如何消耗游戏里面的金币总量&#xff0c;以及如何留住那些非人民币玩家呢 30天加上去了 World of Warcraft [CLASSIC] [魔兽世界…

怎么使用动态IP地址上网

如何设置动态IP地址上网&#xff1f; 设置动态IP地址上网的步骤如下&#xff1a; 一、了解动态IP地址 动态IP地址是由网络服务提供商&#xff08;ISP&#xff09;动态分配给用户的IP地址&#xff0c;它会根据用户的需求和网络情况实时改变。相比于静态IP地址&#xff0c;动态…

使用VuePress-Reco快速搭建博客(保姆级)

简介&#xff1a;VuePress-Reco 一款简洁的 vuepress 博客 & 文档 主题&#xff0c;可以自由搭建自己的风格&#xff0c;比较方便简洁。 链接&#xff1a;vuepress-reco 准备环境&#xff1a; Node.Js >20.5.0&#xff0c;Npm > 10.8.2 OR Yarn > 1.22.19 注&am…

七、SpringBoot日志

1. 得到日志对象 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; //打印日志…

【Django】django模板与前端技术(html模板)

文章目录 “python包html”还是“html包python”?1.新建模板2.模板语法3.views.py测试 “python包html”还是“html包python”? 在前端页面中html代码比python多得多&#xff0c;所以一定是html包python最优&#xff01;于是引出今天的模板。 大体分为三个步骤&#xff1a;…

独立站外链如何影响搜索引擎排名?

独立站的外链对搜索引擎排名有着非常重要的影响。简单来说&#xff0c;外链就像是别的网站对你的网站投的信任票。每一条外链都告诉搜索引擎&#xff1a;“这个网站的内容是有价值的&#xff0c;值得推荐。”因此&#xff0c;外链的数量和质量直接影响你的网站在搜索引擎中的排…

Lc60---1189. “气球” 的最大数量(排序)---Java版

1.题目 2.思路 (1)用字典的方法,ballon,这个单词里面每个字母&#xff0c;需要的个数 (2)再创一个字典的方法统计&#xff0c;输入的字符串的字母的个数 (3)计算能拼凑出多少个“ballon" (4)代码解释 for (char c : text.toCharArray()) {count.put(c, count.getOrDefau…

vue3编程-import.meta.glob实现动态路由(菜单)

import.meta.glob 是vite提供的批量懒加载组件的方法 本地开发环境&#xff1a; const modules import.meta.glob(../views/**/*.vue)这段代码返回的modules是一个Map&#xff1a; key是vue文件的相对路径&#xff0c;值是一个函数&#xff0c;将函数打印出来&#xff0c;如…

Python鲁汶意外莱顿复杂图拓扑分解算法

&#x1f3af;要点 &#x1f3af;算法池化和最佳分区搜索&#xff1a;&#x1f58a;网格搜索 | &#x1f58a;发现算法池 | &#x1f58a;返回指定图的最佳划分 | &#x1f58a;返回指定图的最佳分区 | &#x1f3af;适应度和聚类比较功能&#xff1a;&#x1f58a;图的划分 |…

Python3网络爬虫开发实战(1)爬虫基础

一、URL 基础 URL也就是网络资源地址&#xff0c;其满足如下格式规范 scheme://[username:password]hostname[:port][/path][;parameters][?query][#fragment] scheme&#xff1a;协议&#xff0c;常用的协议有 Http&#xff0c;https&#xff0c;ftp等等&#xff1b;usern…

构建高效园区导览系统:基于3DGIS与物联网技术的实现方案

园区导航的挑战与机遇 在现代化的大型园区中&#xff0c;随着面积的不断扩张和布局的日益复杂&#xff0c;传统的纸质地图已难以满足日益增长的导航需求。每栋楼、每层楼都有着不同的办公室&#xff0c;不同的业务。这种低效的寻路过程不仅影响了客户的来访体验&#xff0c;也…

Flink时间和窗口

目录 时间语义 水位线&#xff08;Watermarks&#xff09; 并行流中的水位线 窗口 滚动窗口—Tumbling Windows 滑动窗口—Sliding Windows 会话窗口—Session Windows 全局窗口—Global Windows 例子 时间语义 如图所示&#xff0c;由事件生成器&#xff08;Event Pr…

LeetCode - #103 二叉树的锯齿形层序遍历

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

雪花算法 集群uid重复问题 uid-generator-spring-boot-starter

1、在生成环境 在某个业务使用该插件生成uid,由于业务整合了 mybatis-plus模块 2、该业务是分部署集群部署以及使用的多线程获取uid&#xff0c;使用中发现唯一建冲突&#xff0c;生成的uid有重复。 然后查看日志发现 workerId 始终为0 怀疑是生成workerId出了问题。 查看跟…

饥荒dst联机服务器搭建基于Ubuntu

目录 一、服务器配置选择 二、项目 1、下载到服务器 2、解压 3、环境 4、启动面板 一、服务器配置选择 首先服务器配置需要2核心4G&#xff0c;4G内存森林加洞穴大概就占75% 之后进行服务器端口的开放&#xff1a; tcp:8082 tcp:8080 UDP:10888 UDP:10998 UDP:10999 共…