2010-03-17 196 views
3

我有一个返回结果集的MYSQL存储过程SP1()。在另一个存储过程中使用mysql存储过程的结果集

我想调用SP2()内部的SP1(),并通过SP1()的结果集循环做一些额外的工作。

我不想包括我的逻辑从SP1(),因为它会使SP2()太复杂。

有什么建议吗?

谢谢。

回答

4

你想做什么听起来不是特别好,也许你应该考虑重新设计这2个特效。不过,你可以这样做,作为一个快速修复:

让你的sp2 sproc把它的中间结果写到一个临时表中,然后你可以在sp1中访问/处理它。然后,您可以删除一旦sp1返回,您在sp2中创建的临时表。

http://pastie.org/883881

delimiter ; 
drop procedure if exists foo; 
delimiter # 

create procedure foo() 
begin 

    create temporary table tmp_users select * from users; 

    -- do stuff with tmp_users 

    call bar(); 

    drop temporary table if exists tmp_users; 

end # 

delimiter ; 

drop procedure if exists bar; 

delimiter # 

create procedure bar() 
begin 
    -- do more stuff with tmp_users 
    select * from tmp_users; 
end # 

delimiter ; 

call foo(); 

不是很优雅,但应该做的伎俩

+0

是的,我最终重新设计了存储过程,解决方案接近您的建议。 SP1()现在创建一个临时表,然后使用光标读取我称为SP2()的每一行。我不知道这是否是一种好的做法,但现在起作用。 – hmak 2010-04-02 21:37:58

+0

酷 - 你会接受一些答案很快谢谢:) – 2010-04-02 23:50:19

+0

对不起,我只是注意到我不接受! – hmak 2010-12-30 21:25:02

0

游标可以帮助解决问题。

我不确定这是否可能,但 为选择调用SP1()并作为普通游标迭代它们。

+0

如何将光标解决这个问题? – hmak 2010-03-18 01:51:48

相关问题