首页 > 解决方案 > 从存储过程中的 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的概念?

我需要这个方法的一些帮助。

标签: mysqlstored-procedures

解决方案


推荐阅读