Mysql 从存储过程中的select语句查询调用另一个存储过程
我对MYSQL和存储过程非常陌生。我试图找到一种方法,通过从存储过程中的表中获取数据来调用循环中的存储过程。下面是示例代码,以便于更好地理解Mysql 从存储过程中的select语句查询调用另一个存储过程,mysql,stored-procedures,Mysql,Stored Procedures,我对MYSQL和存储过程非常陌生。我试图找到一种方法,通过从存储过程中的表中获取数据来调用循环中的存储过程。下面是示例代码,以便于更好地理解 `CREATE TABLE `students` ( `student_id` INT(11) NOT NULL AUTO_INCREMENT, `name` INT(11) NOT NULL, `age` INT(11) NOT NULL, `school` VARCHAR(255) NOT
`CREATE TABLE `students` (
`student_id` INT(11) NOT NULL AUTO_INCREMENT,
`name` INT(11) NOT NULL,
`age` INT(11) NOT NULL,
`school` VARCHAR(255) NOT NULL,
PRIMARY KEY (`student_id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1;
CREATE TABLE `marks` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`student_id` INT(11) NOT NULL,
`subject` INT(11) NOT NULL,
`marks` INT(11) NOT NULL,
`grade` DATE NOT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1;
程序
BEGIN
DECLARE if_finish INT(1) DEFAULT 0;
DECLARE cur_c INT(11) DEFAULT 0;
DECLARE s_sub VARCHAR(100) DEFAULT 0;
DECLARE s_mark INT(11) DEFAULT 0;
DECLARE s_id INT(11) DEFAULT 0;
DECLARE cur CURSOR FOR
SELECT
a.student_id,a.marks,a.subject
FROM
markstable a
INNER JOIN studentstable b ON a.student_id = b.student_id
WHERE
a.s_id> 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET if_finish = 1;
OPEN curs;
SELECT FOUND_ROWS() INTO cur_c;
IF cur_c>0 THEN
FETCH cur INTO s_id ,s_mark,s_sub;
call sp_calculatemarks(s_id,s_mark,s_sub);
ELSE
SET s_sub = '';
END IF;
CLOSE cur;
END
上面的代码大部分运行正常,但问题是它只处理一条记录,而我在Marks表中有48条记录。但我不知道如何获取SP中的所有数据并逐个调用另一个过程。我认为游标不是那样工作的。有没有像fetchrow这样的概念
我需要一些关于这个方法的帮助。你没有在光标上循环。我怀疑检查已找到的行是否是检查你是否有事情要做的正确方法。通常情况下,我会检查处理程序设置的变量的值,这为您提供了一个如何执行此操作的示例。非常感谢您的评论。我认为问题已经解决了。我会让你知道的。