Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

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, 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 के बराबर नहीं लगता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पेजिनेशन (पिछला | अगला) स्मार्टी के साथ

  2. PHP पासवर्ड_ सत्यापित करें डेटाबेस के विरुद्ध काम नहीं कर रहा है

  3. बैकअप MySQL उपयोगकर्ता

  4. हिम तेंदुए पर mysqldb स्थापित करें

  5. MySQL दिनांक और समय फ़ंक्शन मौजूद नहीं हैं