mysql - 从存储过程中的 select 语句查询中调用另一个存储过程
问题描述
我对 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 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 中的所有数据并逐个调用另一个过程。我认为 Cursor 不能以这种方式工作。有没有类似fetchrow的概念?
我需要这个方法的一些帮助。
解决方案
推荐阅读
- regex - 试图从 CSV 中过滤掉唯一的 post_ids
- powershell - 我们如何使用“ls”命令将文件列表从 FTP 附加到本地文件?
- node.js - 如何配置CKEditor以显示居中的粘贴图像?
- xml - 使用带有管道符号的 xpath 搜索 XML |
- php - laravel 渴望加载自我关系
- python - 得到 200 响应而不是 302
- c# - 如何防止 Visual Studio 在更深层次的异常中断后中断所有等待
- javascript - 如何从浏览器使用用户的地理位置?Javascript Vue
- autodesk-forge - 我可以确定用户是否是合同经理吗?
- python - 在 MSYS2 下运行(并读取文件)时,re.search 出人意料地以 None 结束?