Skip to content

动态参数存储过程

点击观看本节视频

存储过程书写规范

SpringReport中书写存储过程示例:call testProcedure(?,?,?)
call 是调用存储过程的关键字,固定写法
testProcedure 存储过程名字
(?,?,?) 这部分是参数,输入参数和输出参数
注意:参数这需要遵守固定的规则,输入参数在前,输出参数在后,并且顺序要与添加的输入输出参数顺序保持一致
例如下面的存储过程 testProcedure,有三个参数,其中给一个输入参数,两个输出参数,调用的sql语句就写成如下格式:
call testProcedure(?,?,?)
同时需要在参数配置页面配置对应的输入参数和输出参数,如下图所示,
输入参数添加了一个参数,参数名为id,编码为id
输出参数添加了两个参数,参数名为最小值,编码为minId 和参数名为总数量,编码值为total
存储过程中的三个?也分别对应了这三个参数,并且是输入参数和输出参数的顺序,三个?从左到右依次会接收id,minId,total三个参数

CREATE DEFINER=`root`@`localhost` PROCEDURE `testProcedure`(in in_id INT,out out_min_id BIGINT,out total INT)
begin
select  min(id) from sys_menu
where id>in_id  into out_min_id;
select count(1) from sys_menu into total;
end

输入图片说明

查询页面截图

如下图所示,报表查询页面的参数只会显示输入参数,不会显示输出参数。

输入图片说明

问题:是不是必须有输入参数和输出参数?

答案:不是的,根据存储过程的实际情况,有可能什么参数都不需要,有可能只有入参,有可能只有出参,也有可能都有 举个例子,如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`()
BEGIN
	SELECT t1.id,COUNT(t2.id) AS count from report_tpl t1 LEFT JOIN luckysheet_report_cell t2 ON t1.id = t2.tpl_id GROUP BY t1.id;

END

该存储过程没有任何参数,查询了id 和count两个字段,可以看下方的截图,调用sql直接写成 call test()即可 虽然没有返回参数,点击执行也会解析出来查询的id和count两个字段 参数配置页面也不需要配置任何参数

输入图片说明输入图片说明