मुझे पता है कि आपने विशेष रूप से पूछा है कि यह कैसे करना है बिना एक उपयोगकर्ता-निर्मित चर - लेकिन इस विचार में आने वाले अन्य लोगों के लिए यह पोस्ट करने लायक होगा कि इसे के साथ कैसे किया जाए एक क्योंकि यह काफी सरल है:
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, 1);
-- ... 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 सर्वर करता है एक अंतर्निर्मित @@NESTLEVEL
प्रदान करें उपरोक्त करने के लिए चर - लेकिन दुर्भाग्य से MySQL के बराबर नहीं लगता है।