0
我有一個存儲過程需要一個參數。通常,它會根據需要在單個ID上調用。但是,有時候,在SELECT中的每個結果上運行它都會很有幫助。如何獲取SELECT語句的結果並在每個結果上運行存儲過程?將SELECT的結果發送到MySQL中的存儲過程
我有一個存儲過程需要一個參數。通常,它會根據需要在單個ID上調用。但是,有時候,在SELECT中的每個結果上運行它都會很有幫助。如何獲取SELECT語句的結果並在每個結果上運行存儲過程?將SELECT的結果發送到MySQL中的存儲過程
這不是直接可行的,但是......
只要存儲過程不返回結果集,您可以編寫一個存儲功能接受所需的輸入,並調用程序具有與參數相同的值。如果在select查詢中使用了存儲函數,則通常會爲每個返回的行調用它,除非它在where子句中引用,在這種情況下,優化程序可能會調用它以獲得比您預期的更多的行,具體取決於查詢計劃。
或者您可以直接將邏輯移入存儲函數,而不是使用任何程序。
哦,那麼近。我會將此標記爲答案,但這不起作用。我需要修改用於SELECT的表中的數據,而MySQL不喜歡這樣 - 不會讓我使用函數來修改向函數提供數據的表。 – thechrisroberts
謝謝,但都不會丟失。有一種方法可以通過將行實現爲匿名臨時表來修改您選擇的同一個表的行。 SELECT t1.foo,your_func(t1.bar)FROM(SELECT foo,bar FROM table_name WHERE ...) t1' ...這會創建一個帶有內部select行的臨時表,所以現在,神奇地說,'t1'不再是基表的別名,它是匿名臨時表的別名,它被方便地自動銷燬爲查詢結束後。 –