MySQL存储过程 - 如何引用内部创建的记录集

时间:2014-08-18 00:14:44

标签: mysql stored-procedures

我很好奇如何从同一存储过程中的辅助查询或SET调用引用现有存储过程SELECT语句。

例如:

CREATE PROCEDURE 'mysp' (OUT sumvalue INT)
BEGIN
    -- This is the core recordset the SP returns
    SELECT * FROM Table

    -- I also want to return a value based on the above recordset
    SET sumvale = SUM(previousselect.values)
END

基本上,我有一个返回详细记录集的SP,我需要根据该记录集中的数据返回SUM和自定义值。问题是我无法弄清楚如何在SELECT语句之后引用数据(例如,它是否创建了我可以使用的内部引用,例如@ recordset1.X)。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

尝试使用this链接中的光标:

由于MySql不允许您从商店程序或函数返回记录集,您可以尝试这样做:

CREATE DEFINER=`root`@`localhost` PROCEDURE `some_procedure`(out some_id int)
BEGIN
    declare done boolean default false;
    declare id int;
    declare tot decimal(10,2);

    declare some_cursor cursor for 
       select id, total from some_table where id = some_id;

    declare continue handler for not found set done = true;

    open some_cursor;
    loop1: loop
        fetch some_cursor into id, tot;
        if done=true then
            leave loop1;
        end if;

        //do your calculation here or whatever necessary you want to do with the code

    end loop loop1;
END;