gpt4 book ai didi

mysql - 遍历结果行并将列数据存储到存储过程变量mysql

转载 作者:行者123 更新时间:2023-11-29 01:30:54 24 4
gpt4 key购买 nike

我正在尝试学习 mysql 中的存储过程。我知道下面的例子不需要 SP,但这只是为了我的学习目的 - 只是为了了解如何循环遍历行,并在行内选择特定的列数据。

假设表上的 SELECT 从我的表中返回具有以下结构的 5 条记录 -

表名:t1列:c1、c2、c3

我想遍历 5 行中的每一行,对于每一行,我想将列单元格数据存储到 SP 变量 varc1、varc2、varc3 中,以便 varc1 = c1, varc2 = c2, varc3 = c3。我将在循环内使用这些 varc1、varc2、varc3 进行进一步计算。

我假设需要一个存储过程,但我没有得到执行行迭代然后从循环中正在考虑的行中的每一列中选取数据的方法。

对 mysql/存储过程很陌生。谢谢!

最佳答案

如您所知,您要求的是对大多数问题的特别低效的解决方案。但是,由于您特别要求它,并且(偶尔)这是解决问题的唯一方法(或者您个人有时间弄清楚如何解决问题的唯一方法)。以下是您可以按照要求执行的操作:

创建您的 t1 表,例如:

CREATE TABLE t1(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, C1 INT, C2 INT, C3 INT);

执行您描述的 SELECT,例如:

INSERT INTO  t1 SELECT NULL,c1,c2,c3 FROM the_table; 

现在这是您的 Row-By-Agonising-Row“ReeBAR”低效率存储过程:

为您的程序准备空间并设置分隔符:

DROP PROCEDURE IF EXISTS ReeBAR;
DELIMITER ;;

编写程序:

CREATE PROCEDURE ReeBAR()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE varc1 INT DEFAULT 0;
DECLARE varc2 INT DEFAULT 0;
DECLARE varc3 INT DEFAULT 0;
SELECT COUNT(*) into n FROM t1;
set i=1;
WHILE i<=n DO
SELECT c1 FROM t1 WHERE id=i INTO varc1;
SELECT c2 FROM t1 WHERE id=i INTO varc2;
SELECT c3 FROM t1 WHERE id=i INTO varc3;
--queries which couldnt be made into set based queries go here---
SET i = i + 1;
END WHILE;
End;

或者,如果您的 id 列不是连续的,您可以使用以下游标形式。

CREATE PROCEDURE ReeBAR()
BEGIN
DECLARE cursor_ID INT;
DECLARE cursor_VAL VARCHAR;
DECLARE done INT DEFAULT FALSE;
DECLARE cursor_i CURSOR FOR SELECT c1,c2,c3 FROM t1;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE varc1 INT DEFAULT 0;
DECLARE varc2 INT DEFAULT 0;
DECLARE varc3 INT DEFAULT 0;
OPEN cursor_i;
read_loop: LOOP
FETCH cursor_i INTO varc1, varc2, varc3;
IF done THEN
LEAVE read_loop;
END IF;
--queries which couldnt be made into set based queries go here---
END LOOP;
CLOSE cursor_i;
END;

不要忘记“结束”您使用的过程并重新设置分隔符

;;
DELIMITER ;

最后运行您的 ReBAR 程序

CALL ReeBAR();

(代码未经测试)

关于mysql - 遍历结果行并将列数据存储到存储过程变量mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12877244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com