3
我有一個遞歸MySQL存儲過程爲我所設定的max_sp_recursion_depth=10.
如何獲得mysql存儲過程遞歸的深度?
現在,沒有設置一個局部變量,我想知道的是單一的執行中有什麼遞歸的水平。
我認爲肯定有一個存儲深度的會話變量(當您達到最大級別時您還會知道什麼)但我無法找到它。我會避免使用一個變量來增量執行此操作。我怎麼知道這個(如果有的話)系統變量?
我有一個遞歸MySQL存儲過程爲我所設定的max_sp_recursion_depth=10.
如何獲得mysql存儲過程遞歸的深度?
現在,沒有設置一個局部變量,我想知道的是單一的執行中有什麼遞歸的水平。
我認爲肯定有一個存儲深度的會話變量(當您達到最大級別時您還會知道什麼)但我無法找到它。我會避免使用一個變量來增量執行此操作。我怎麼知道這個(如果有的話)系統變量?
我知道你具體問如何做到這一點沒有用戶創建的變量 - 但對於其他人碰到這個即將以爲這將是值得張貼如何與一個做,因爲它是相當簡單:
CREATE PROCEDURE sp_recursive
BEGIN
// ... DECLAREs here
-- Set maximum recursion depth (max is 255)
SET @@SESSION.max_sp_recursion_depth = 10;
-- Increment current recursion depth
SET @recursion_depth = IFNULL(@recursion_depth + 1, 0);
-- ... More stored procedure code
-- Decrement current recursion depth. Note: Care must be taken to ensure this line
-- is *always* executed at the end of the stored procedure.
SET @recursion_depth = @recursion_depth - 1;
END
說明
的@recursion_depth
會話範圍變量由上述SET
語句中的每個被輸入該存儲的過程時間遞增。第一次輸入時,變量未初始化,所以值爲NULL
- 這由IFNULL()
進行檢查,在此情況下將其重新分配爲零。在退出之前的存儲過程結束時,深度需要遞減。
還注意到
值得關注的是SQL Server的不做上述提供了一個內置@@NESTLEVEL
變量 - 但不幸的是MySQL的似乎並不具有等同的。
你爲什麼使用遞歸?也許你可以用不同的數據結構來避免它。 – eggyal 2012-04-27 13:35:31
這不是我的情況.... OT – 2012-04-27 13:41:59
讓我改述一下:你爲什麼使用遞歸? SQL不打算用於這種方式。你幾乎可以肯定的避免使用不同的數據結構。 – eggyal 2012-04-27 13:47:28