爱哭的小胖胖 2014-03-14 03:23 采纳率: 0%
浏览 4476

mysql存储过程如何获取多个结果集

我想用mysql存储过程获取外键数据,然后通过out输出来。结果发现就能获取一条记录,不知道怎么去获取多条。麻烦各位帮忙看下。

存储过程代码:
CREATE PROCEDURE empCusState( in riqi date,out rname varchar(2000),out cname varchar(2000),out tname varchar(2000))
begin

declare sql_text varchar(5000);

set sql_text = concat('select t.t_Name , r.r_Name , c.c_Name into @sql_tname, @sql_rname,@sql_cname from
((roomcourse rc inner join teacher t on rc.t_Id=t.t_Id ) inner join room r on rc.r_Id=r.r_Id) inner join course c on rc.c_Id=c.c_Id where rc.rc_dates=\'',riqi,'\'');

set @sql_text = sql_text;

prepare stmt from @sql_text;

execute stmt;

set rname = @sql_rname;

set cname = @sql_cname;

set tname = @sql_tname;

end

执行代码:
call empCusState('2014-03-03',@a,@b,@c);
select @a,@b,@c;

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 20:52
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在MySQL中,你可以使用FETCH NEXT语句从查询的结果集中获取更多行。这将返回一个游标对象,你可以在其中遍历每行并提取所需的信息。以下是一个例子,展示了如何从你的存储过程中获取更多的结果集:

    CREATE PROCEDURE empCusState( in riqi date,out rname varchar(2000),out cname varchar(2000),out tname varchar(2000))
    
    begin
    
        declare sql_text varchar(5000);
        
        set sql_text = concat('select t.t_Name , r.r_Name , c.c_Name into @sql_tname, @sql_rname,@sql_cname from
                              (roomcourse rc inner join teacher t on rc.t_Id=t.t_Id ) inner join room r on rc.r_Id=r.r_Id) 
                              inner join course c on rc.c_Id=c.c_Id where rc.rc_dates=\'',riqi,'\'');
        
        set @sql_text = sql_text;
        
        prepare stmt from @sql_text;
        
        execute stmt;
        
        set @rname = @sql_rname;
        set @cname = @sql_cname;
        set @tname = @sql_tname;
        
        while fetch next from stmt limit 10 into @rname, @cname, @tname;
            
            print 'Name: ', @rname, '\n';
            print 'Course Name: ', @cname, '\n';
            print 'Teacher Name: ', @tname, '\n';
    
    end
    

    在这个例子中,我们创建了一个新的存储过程empCusState,它接受一个日期参数riqi。然后,我们定义了一个SQL语句,用于选择房间、教师和课程的名称,并将其插入到变量@sql_tname@sql_rname@sql_cname中。接着,我们调用这个存储过程,并设置了几个变量以捕获查询结果。

    然后,我们在循环中使用while语句从stmt游标中逐个读取每一行。对于每一行,我们打印出这些信息。

    评论

报告相同问题?