12

से परिवर्तनीय परिणाम सेट करें जब मैं सहेजी गई प्रक्रिया बनाता हूं, तो मैं कुछ परिवर्तनीय हां बना सकता हूं? उदाहरण के लिए:क्वेरी

CREATE PROCEDURE `some_proc`() 
BEGIN 

    DECLARE some_var INT; 
    SET some_var = 3; 
.... 

प्रश्न: लेकिन कैसे क्वेरी से चर परिणाम सेट करने के लिए, कि कैसे इस तरह की कुछ बनाने के लिए है:

DECLARE some_var INT; 
SET some_var = SELECT COUNT(*) FROM mytable ; 

?

+0

यहां देखें, आपका प्रश्न डुप्लिकेट संभव है। http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 – bodi0

+1

नहीं, वास्तव में एक डुप्लिकेट नहीं। Http://stackoverflow.com/questions/3888735/mysql-set-user-variable-from-result-of-query?rq=1 का विषय "उपयोगकर्ता-परिभाषित चर" है। यह प्रश्न संग्रहीत प्रक्रिया स्थानीय चर के बारे में है। मेरे उत्तर में वाक्यविन्यास उपयोगकर्ता परिभाषित चर के लिए भी काम करता है, लेकिन दूसरी तरफ नहीं। –

उत्तर

33

ऐसा करने के कई तरीके हैं।

आप एक सबक्वेरी उपयोग कर सकते हैं:

SET some_var = (SELECT COUNT(*) FROM mytable); 

(अपने मूल की तरह, सिर्फ कोष्टक प्रश्नों के आसपास जोड़ने)

या एक से अधिक मान आवंटित करने के लिए चयन करें जांच सिंटैक्स का उपयोग करें:

SELECT COUNT(*), MAX(col) 
INTO some_var, some_other_var 
FROM tab; 

सबक्वायरी सिंटैक्स थोड़ा तेज है (मुझे नहीं पता क्यों) लेकिन केवल एक मान असाइन करने के लिए काम करता है। सिंटैक्स में चयन करने के लिए आप एक साथ कई मान सेट कर सकते हैं, इसलिए यदि आपको क्वेरी से कई मानों को पकड़ने की आवश्यकता है तो आपको प्रत्येक चर के लिए बार-बार क्वेरी निष्पादित करने के बजाय ऐसा करना चाहिए।

अंत में, यदि आपकी क्वेरी एक पंक्ति नहीं बल्कि एक परिणाम देता है, तो आप cursor का उपयोग कर सकते हैं।

+0

आप गलत हैं। –

+0

रोलैंड बौमन, बहुत बहुत धन्यवाद, आपका दूसरा संस्करण काम कर रहा है, लेकिन पहले नहीं, ब्रांडेसिस मदद नहीं करता है। :) –

+0

नंबर दोनों काम करते हैं। आपने एक वाक्यविन्यास त्रुटि करनी होगी। mysql> delimiter // mysql> फ़ंक्शन f() -> int देता है -> -> घोषित करें v int; -> सेट v = (दोहरी से गिनती (*) का चयन करें); -> वापसी v; -> अंत; -> // क्वेरी ठीक है, 0 पंक्तियां प्रभावित हुईं (0.05 सेकंड) mysql> f() का चयन करें; -> // + ------ + | एफ() | + ------ + | 1 | + ------ + सेट में 1 पंक्ति (0.00 सेकंड) mysql> चयन संस्करण(); -> // + ----------- + | संस्करण() | + ----------- + | 5.5.20 | + ----------- + सेट में 1 पंक्ति (0।00 सेकंड) –

3

निम्नलिखित चयन कथन आपको परिणाम (*) से परिणाम सहेजने की अनुमति दे सकता है।

SELECT COUNT(*) FROM mytable INTO some_var; 
+2

MySQL आपको कथन के अंत में अंतिम खंड के रूप में INTO खंड सेट करने की अनुमति देता है। हालांकि, मानक एसक्यूएल में यह चयन और FROM खंड के बीच दिखाई देता है। –

+0

जुर्गेन डी, बहुत बहुत धन्यवाद। :) –

संबंधित मुद्दे