mysql 动态sql的拼接以及执行分页
Posted 竹根七
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 动态sql的拼接以及执行分页相关的知识,希望对你有一定的参考价值。
1:建立存储过程,标记参数
CREATE DEFINER=`root`@`localhost` PROCEDURE `pos_get_drugInList`(IN page integer,IN limitz integer,IN drugCodez VARCHAR(50),IN effectDatez VARCHAR(50),IN chainIdz VARCHAR(19)) BEGIN DECLARE start integer; set start = (page-1)*limitz; set @sql = \'select * from dsos_vot_drugrecord where 1 = 1\'; #获取药品信息(最多一千条) if drugCodez <> \'\' then set @sql = CONCAT(@sql,\' and drugCode= \',drugCodez); end if; if effectDatez <> \'\' then set @sql = CONCAT(@sql,\' and effectDate= \',\'\'\'\',effectDatez,\'\'\'\');end if; if chainIdz <> \'\' then set @sql = CONCAT(@sql,\' and chainId= \',chainIdz); end if; set @sql = CONCAT(@sql,\' limit \',start,\', \',limitz); -- PREPARE distSQL FROM @SQL ; -- EXECUTE distSQL; -- DEALLOCATE PREPARE distSQL ; select @sql; END
2:先打印出sql字符串,判断是否是理想值
3:干掉注释,执行sql语句,看结果
CREATE DEFINER=`root`@`localhost` PROCEDURE `pos_get_drugInList`(IN page integer,IN limitz integer,IN drugCodez VARCHAR(50),IN effectDatez VARCHAR(50),IN chainIdz VARCHAR(19)) BEGINDECLARE start integer; set start = (page-1)*limitz; set @sql = \'select * from dsos_vot_drugrecord where 1 = 1\'; #获取药品信息(最多一千条) if drugCodez <> \'\' then set @sql = CONCAT(@sql,\' and drugCode= \',drugCodez); end if; if effectDatez <> \'\' then set @sql = CONCAT(@sql,\' and effectDate= \',\'\'\'\',effectDatez,\'\'\'\');end if; if chainIdz <> \'\' then set @sql = CONCAT(@sql,\' and chainId= \',chainIdz); end if; set @sql = CONCAT(@sql,\' limit \',start,\', \',limitz); PREPARE distSQL FROM @SQL ; EXECUTE distSQL; DEALLOCATE PREPARE distSQL ; #select @sql; END
4:结果
以上是关于mysql 动态sql的拼接以及执行分页的主要内容,如果未能解决你的问题,请参考以下文章
springboot2.x+MyBatis-Plus+mysql5.7 动态拼接sql语句 分页查询 自定义sql 查询条件 分组 排序
MySQL中limit使用动态参数的解决方法(拼接SQL字符串语句来执行SQL)