2010-03-17 201 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

相關問題