mysql - 将存储过程的每一行插入一个表中
问题描述
我在 MySql 中有两个存储过程。其中一个进行计算并分组返回所有内容。对于另一个存储过程,我有一个每个月运行的 WHILE 语句并调用第一个存储过程。我想得到每个组的结果并将它们保存在一个表中。
代码类似于:
CREATE PROCEDURE `first`(IN `start` date, **it should be list of items** )
begin
SET result = 0;
SELECT
item.name,
sum(amount) *INTO result*
FROM
FOO
INNER JOIN
BAR ON id = id
WHERE
date(someDate) < date(start)
group by something;
end
跑步者是这样的:
CREATE PROCEDURE `runner`(IN `from` date, IN `to` date)
BEGIN
set dateTo = date(to);
set dateFrom = date(from);
WHILE DATE(dateFrom) <= DATE(dateTo) DO
call first(dateFrom, @res);
// here I need another loop through all results of the first procedure to insert each one of them in the following line.
insert into table_x (**some values which have been returned**);
SET dateFrom = DATE_ADD(dateFrom, INTERVAL 1 month);
END WHILE;
END
解决方案
我不-'认为循环和第二个程序真的很有必要
MySQL 不能返回表数组或类似的东西,但你可以使用临时表
DELIMITER $$
CREATE PROCEDURE `first`(IN `start` date )
begin
DROP TEMPORARY TABLE IF EXISTS myTable;
CREATE TEMPORARY TABLE myTABLE
SELECT
item.name,
sum(amount)
FROM
FOO
INNER JOIN
BAR ON id = id
WHERE
date(someDate) < date(start)
group by something;
end$$
DELIMITER ;
外部过程
DELIMITER $$
CREATE PROCEDURE `runner`(IN `_from` date, IN `_to` date)
BEGIN
set dateTo = date(_to);
set dateFrom = date(_from);
WHILE DATE(dateFrom) <= DATE(dateTo) DO
call first(dateFrom, @res);
insert into table_x (SELECT * FROM myTable);
SET dateFrom = DATE_ADD(dateFrom, INTERVAL 1 month);
END WHILE;
END$$
DELIMITER ;
您可以使动态 sql 使用不同的变量
DELIMITER $$
CREATE PROCEDURE `first`(IN `_start` date , IN _group varchar(100))
begin
DROP TEMPORARY TABLE IF EXISTS myTable;
SET @sql := CONCAT("
CREATE TEMPORARY TABLE myTABLE
SELECT
item.name,
sum(amount)
FROM
FOO
INNER JOIN
BAR ON id = id
WHERE
date(someDate) < date(",_gRoup,")
group by",_goup,";");
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
end$$
DELIMITER ;
推荐阅读
- python - 将所有小写字母转换为大写字母,反之亦然
- java - Spring Boot Stram API 大数据
- python - 打印 JSON 响应而不是响应代码
- python - 为了用多个变量更新成本值,这个程序有什么问题?
- node.js - 如何在 Node.js 中验证来自 QLDB 的文档?
- typescript - 如何在接口中链接 keyof 类型
- r - 绘制包含不同类型的 xts 对象的问题
- visual-studio-code - 为什么 Visual Studio Code 使用 5.1 而不是 Core 在单独的 shell 中打开我的 PowerShell 文件?
- jquery - jquery 1.11.1 版:单击未使用 append() 创建的按钮
- css - 在 React 中实现模式的正确方法