存储过程为什么使用DELIMITER $$,存储过程的详细运用解释

这篇具有很好参考价值的文章主要介绍了存储过程为什么使用DELIMITER $$,存储过程的详细运用解释。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这是正确的存储过程写法,可以成功执行,相比较上图的报错,增加了DELIMITER,简单解释下这个命令的用途,在MySQL中每行命令都是用“;”结尾,回车后自动执行,在存储过程中“;”往往不代表指令结束,马上运行,而DELIMITER原本就是“;”的意思,因此用这个命令转换一下“;”为"$$",这样只有收到"$$"才认为指令结束可以执行

delimiter就是告诉mysql解释器,该段命令是否已经结束了,是否可以执行了。
默认情况下,delimiter是分号;,遇到分号就执行。


后面的双美元符号 就是告诉mysql,遇到双美元符号再执行

这改变了MySQL命令的默认分隔符,使得存储过程中可以包含多个SQL语句。文章来源地址https://www.toymoban.com/news/detail-824824.html

-- 定义分隔符:`DELIMITER`。这改变了MySQL命令的默认分隔符,
-- 使得存储过程中可以包含多个SQL语句。
DELIMITER $$

-- 选择数据库meteorological:USE `meteorological`。
-- 这指示MySQL使用名为meteorological的数据库。
USE `meteorological`$$

-- **删除如果已存在的存储过程**:DROP PROCEDURE IF EXISTS `StatisticsForDay1`。
如果存储过程`StatisticsForDay1`已经存在,则删除它。
DROP PROCEDURE IF EXISTS `StatisticsForDay1`$$

-- ∗∗创建存储过程∗∗:CREATE DEFINER=`root@`%` PROCEDURE `StatisticsForDay1`()
CREATE DEFINER=`root`@`%` PROCEDURE `StatisticsForDay1`()

BEGIN
-- **声明变量∗∗:声明了两个变量,sql_str用于存储SQL语句,
-- `CURDATE`用于存储当前日期减去一天的值。
	DECLARE sql_str VARCHAR(1000);
	DECLARE CURDATE VARCHAR(10);
-- ∗∗获取昨天的日期∗∗:使用‘SELECT DATE_ADD(CURRENT_DATE,INTERVAL −1 DAY)INTO CURDATE;
-- ‘获取昨天的日期,并将其存储在变量‘CURDATE‘中。
	SELECT DATE_ADD(CURRENT_DATE,INTERVAL -1 DAY) INTO CURDATE;
	
-- ∗∗构建并执行删除语句∗∗:构建一个SQL语句来删除`bn_day_sum`表中昨天的所有记录,并执行它。
	SET sql_str = CONCAT('
	DELETE FROM bn_day_sum
	WHERE `date` LIKE ''',CURDATE,'%''');
	SELECT sql_str;
	
	SET @sql = sql_str;
	PREPARE stmt FROM @sql;
	EXECUTE stmt;
	DEALLOCATE PREPARE stmt;
	
-- ∗∗构建并执行插入语句∗∗:构建一个SQL语句来从‘bn_hour_sum‘表中选择昨天的数据,
-- 并将其插入到`bn_day_sum`表中。然后执行这个语句。
	SET sql_str = CONCAT('
	INSERT INTO bn_day_sum(device,`group`,num,`date`,`max_value`,max_value_time,
    `min_value`,`min_value_time`,sum_value,count_num,avg_num,warn_count,`time`)
	SELECT device,`group`,num,DATE(`hour`) `Date`,
	MAX(`max_value`) `MaxValue`,NULL MaxValueTime,
	MIN(`min_value`) `MinValue`,NULL MinValueTime,
	SUM(`sum_value`) SumValue,SUM(count_num) CountNum,
	SUM(`sum_value`)/SUM(count_num) AvgNum,
	SUM(`warn_count`) WarnCount,CURRENT_TIMESTAMP Time
	FROM bn_hour_sum 
	WHERE `hour` LIKE ''',CURDATE,'%''
	GROUP BY device,`group`,num, DATE(`hour`) ');
	SELECT sql_str;
	
	SET @sql = sql_str;
	PREPARE stmt FROM @sql;
	EXECUTE stmt;
	DEALLOCATE PREPARE stmt;
	
	-- 尖凤平谷统计 10101,10102,10103,10104 从10144得到
	SELECT DATE(CURDATE) INTO @curDate;
-- ∗∗创建临时表并插入数据∗∗:创建一个临时表(如果它不存在),并插入一些统计数据,
-- 这些数据基于对‘bn_hour_sum‘表中特定记录的筛选和计算。
	CREATE TEMPORARY TABLE IF NOT EXISTS t1(Device VARCHAR(32),
    `Group` VARCHAR(32),Num VARCHAR(64),s INT,p INT,f INT,v INT);
-- ∗∗将数据插入到bn_day_sum表中∗∗:最后,将临时表中的数据插入到‘bn_day_sum‘表中。
	INSERT INTO t1 SELECT device,`group`,num,
	SUM(CASE spfv	WHEN 's' THEN `max_value` - `min_value` ELSE 0 END) s,
	SUM(CASE spfv	WHEN 'p' THEN `max_value` - `min_value` ELSE 0 END) p,
	SUM(CASE spfv	WHEN 'f' THEN `max_value` - `min_value` ELSE 0 END) f,
	SUM(CASE spfv	WHEN 'v' THEN `max_value` - `min_value` ELSE 0 END) v
	FROM
	bn_hour_sum
	WHERE DATE(`hour`) = @curDate AND num='10144'
	GROUP BY device,`group`,num;

-- 将临时表t1中的数据插入到bn_day_sum表中。对于不同的设备(10101、10102、10103、10104),
-- 它们的数据来自相同的临时表t1,但插入到bn_day_sum表中的数据有所不同。例如,
-- 对于设备'10101',它的max_value、min_value等数据都设置为0,
-- 并且从临时表t1中选择了s列作为其sum_value。
	INSERT INTO bn_day_sum(device,`group`,num,`date`,`max_value`,max_value_time,
`min_value`,min_value_time,sum_value,count_num,avg_num,warn_count,TIME)
	SELECT t1.device,t1.`group`,'10101',@curDate,0,NULL,0,NULL,t1.s,0,0,0,
CURRENT_TIMESTAMP 
FROM t1;
    INSERT INTO bn_day_sum(device,`group`,num,`date`,`max_value`,max_value_time,
`min_value`,min_value_time,sum_value,count_num,avg_num,warn_count,TIME)
	SELECT t1.device,t1.`group`,'10102',@curDate,0,NULL,0,NULL,t1.p,0,0,0,
CURRENT_TIMESTAMP FROM t1;
	INSERT INTO bn_day_sum(device,`group`,num,`date`,`max_value`,max_value_time,
`min_value`,min_value_time,sum_value,count_num,avg_num,warn_count,TIME)
	SELECT t1.device,t1.`group`,'10103' ,@curDate,0,NULL,0,NULL,t1.f,0,0,0,
CURRENT_TIMESTAMP FROM t1;
	INSERT INTO bn_day_sum(device,`group`,num,`date`,`max_value`,max_value_time,
`min_value`,min_value_time,sum_value,count_num,avg_num,warn_count,TIME)
	SELECT t1.device,t1.`group`,'10104',@curDate,0,NULL,0,NULL,t1.v,0,0,0,
CURRENT_TIMESTAMP FROM t1;

-- 最后,这段代码删除了临时表t1。
-- 总的来说,这段存储过程将之前计算得到的统计数据(针对不同设备)从临时表t1中提取出来,
-- 并插入到bn_day_sum表中,最后清理了临时表。
	DROP TEMPORARY TABLE t1;
END$$

DELIMITER ;

到了这里,关于存储过程为什么使用DELIMITER $$,存储过程的详细运用解释的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么我们需要去中心化存储?

    为什么我们需要去中心化存储? 我们的社会正处于前所未有的信息大爆炸时代,未来将是数据成为主要生产要素的数字时代,而 Web3 也不外乎于此,作为数据解决方案——去中心化存储,不仅是区块链技术的三大支柱(计算、存储、网络)之一,也是 Web3 领域最早出现也最受

    2024年02月02日
    浏览(63)
  • 为什么我坚定看好分布式存储

    老林发现,后台私信和社群里有不少朋友都对Filecoin恨铁不成钢,低迷许久,还能起得来吗?对此老林想说,虽然现阶段Filecoin的表现不尽如人意,但对于分布式存储这个赛道我是坚定看好的,为何? 数据爆炸的时代 人民网在去年曾发表过这样一篇文章“ 分布式存储打开千亿

    2024年02月06日
    浏览(35)
  • Elasticsearch:什么是向量和向量存储数据库,我们为什么关心?

    Elasticsearch 从 7.3 版本开始支持向量搜索。从 8.0 开始支持带有 HNSW 的 ANN 向量搜索。目前 Elasticsearch 已经是全球下载量最多的向量数据库。它允许使用密集向量和向量比较来搜索文档。 向量搜索在人工智能和机器学习领域有许多重要的应用。 有效存储和检索向量的数据库对于

    2024年02月08日
    浏览(44)
  • TCP/IP传输过程中为什么要分片传输

    当数据包太大无法在网络中一次传输完成时, TCP/IP协议会将数据包分成小块进行传输,这就是分片传输 。这样做的原因是因为不同的网络设备或链路有最大传输大小的限制,比如某些网络设备只能接收较小的数据包。 可以把数据包想象成一个大块的蛋糕,而网络设备的MTU就

    2024年02月15日
    浏览(42)
  • HTTPS 的通信加解密过程,证书为什么更安全?

    目录 一、什么是https 二、HTTPS 的加解密过程 三、HTTPS 为什么更安全? HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密和身份验证保护数据传输安全的通信协议。它是在常用的HTTP协议基础上添加了 SSL/TLS 加密层来实现数据的加密传输和验证服务器身份的功能。 在HTTPS通信过

    2024年02月03日
    浏览(44)
  • 深度学习过程中测试准确率先上升后下降是为什么?

    很典型的过拟合问题。 在训练过程中的验证准确率前上升,后下降,即在验证集上的表现先好后差。 数据相对模型来说比较简单,即模型的表达能力过剩。在初始训练阶段,模型逐渐开始学习到一些信息,因而在验证集上的表现是提升的,在到达某一点后,模型接着训练则

    2024年02月11日
    浏览(29)
  • 为什么越来越多的企业选择云数据存储而放弃本地数据存储?

    随着企业的发展,它们会产生大量数据。企业已经意识到,利用他们的数据做出数据驱动的决策对于创新和保持竞争优势至关重要。 本文将会探讨企业在收集和分析大数据时可能面临的主要挑战,以及将企业数据仓库部署到本地或云数据存储的选择。我们将根据安全性、成本

    2024年02月08日
    浏览(34)
  • 为什么需要分布式存储技术?IPFS价值在哪?

    IPFS中文翻译是星际文件系统,是硬盘共享的互联网底层协议,主要用于访问数据。简单来说,IPFS可以创建一个存储网络,让更多的人在分享闲置存储空间的同时获得收入。 这种人人都可以参与共享硬盘的存储模式,称为分布式存储。为什么我们需要这种分布式存储技术?要

    2024年02月13日
    浏览(42)
  • C# 线程本地存储 为什么线程间值不一样

    有朋友在微信里面问我,为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给后面类似疑问的朋友解个惑吧。 为了方便讲述,定义一个 Th

    2024年01月23日
    浏览(45)
  • 你用过猿如意吗?猿如意可以使用ChatGPT哦,这里详细介绍了猿如意的功能,为什么我建议你使用猿如意,来看看吧

    你是否还在为为每次安装IDE(集成开发工具)要去各种网站找教程而烦恼? 你是否还在为各种文本格式转换而头痛? 你是否在为斗图都不过兄弟们而卑微? 你是否在为互联网中庞大冗杂却低效的教程文档而崩溃? 你想不想有一个关于代码的模板库? 你想不想不用\\\"科技\\\"就使

    2023年04月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包