mysql存储过程分析

mysql 5.7 存储过程的定义

最近做统计报表,一个数据展示,需要查询mysql,但是如果使用left join 这种语句发现太麻烦了
还是写存储过程吧
之前发过几篇文章编写存储过程,但是真的运行起来发现有各种各样的问题
所以今天也算是巩固也算是对新的坑的一个填补

相关文章:https://blog.csdn.net/datouniao1/article/details/79315198

存储过程结构定义

这样写对吗:

DROP PROCEDURE IF EXISTS PR_SLV;  
CREATE PROCEDURE PR_SLV()
BEGIN
   DECLARE myday varchar(32); 
END;

一个最为简单的,我们运行查看:
在这里插入图片描述

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

这样的一个错误,我检查我的语句发现没有问题啊
第三行,定义一个变量,怎么会出现问题
原因我们定义的时候需要告诉mysql 上面执行的语句是一体的 是一个存储过程
怎么告诉mysql

DROP PROCEDURE IF EXISTS PR_SLV;  
delimiter //
CREATE PROCEDURE PR_SLV()
BEGIN
   DECLARE myday varchar(32); 
END;
//

加上上面红色框中的内网,就可以告诉mysql 我要定义一个存储过程了,这个里面的代码是一体的,你不要分开执行啊
我们再执行试一下
在这里插入图片描述

mysql中的三目运算

java写多了,我们中认为三目运算时这样的 :1==2?"":3
mysql 中的三目运算时这样的
IF(expr1,expr2,expr3)
expr1 是 表达式 如果为true 取值expr2 如果为false 或者为NULL 取值为 expr3
例如:

					INSERT INTO hx_bigdata_pie(pname,pvalue,porder,ptype,addtime,ptaxno) values(right(myday,5),IF(myjshj,myjshj,'0'),IF(myhjse,myhjse,'0'),'lastten',CURDATE(),ptaxno);

mysql 中字符串截取

right(str,length) left(str,length)

right 从右边开始 取出长度为length的字符串
left 从左边开始 取出长度为length的字符串

MYsql当前日期

CURDATE()
日期减:Date_sub(CURDATE(),INTERVAL id DAY)

最终存储过程如下:

DROP PROCEDURE IF EXISTS PR_MULTI;  
delimiter //
CREATE PROCEDURE PR_MULTI(ptaxno VARCHAR(50))
BEGIN
   DECLARE myday varchar(32); 
	 DECLARE myjshj varchar(32); 
	 DECLARE myhjse varchar(32); 
	 DECLARE myse varchar(32); 
	 DECLARE done INT DEFAULT FALSE;
   DECLARE myCursor CURSOR FOR (select Date_sub(CURDATE(),INTERVAL id DAY) as dates from hx_row limit 7);
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;  
	 delete from hx_bigdata_pie where ptype='lastten';
   OPEN myCursor; 
		myLoop: LOOP 
		 FETCH myCursor into myday;
			 IF done=1 THEN
			 LEAVE myLoop; -- 结束循环  
			 END IF;
			    select sum(jshj) into myjshj from hx_main where DATE_FORMAT(kpdate,'%Y-%m-%d')=myday and xsh_taxno=ptaxno;
					select sum(hjse) into myhjse from hx_main where DATE_FORMAT(kpdate,'%Y-%m-%d')=myday and xsh_taxno=ptaxno;
					INSERT INTO hx_bigdata_pie(pname,pvalue,porder,ptype,addtime,ptaxno) values(right(myday,5),IF(myjshj,myjshj,'0'),IF(myhjse,myhjse,'0'),'lastten',CURDATE(),ptaxno);
     END LOOP myLoop; -- 结束自定义循环体 
   CLOSE myCursor;
	 select * from hx_bigdata_pie where ptype='lastten' order by id desc limit 7;
END;
//

总结: 上面是对存储过程的应该注意的点,以及新了解到的知识的一个记录

希望对你有所帮助

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值