MySQL एक संग्रहीत कार्यविधि से परिणाम सेट कैसे लौटाता है?


16

मैं एक वेब अनुप्रयोग में उपयोग के लिए संग्रहीत प्रक्रियाओं के आसपास अपना सिर प्राप्त करने की कोशिश कर रहा हूं। ऐसा लगता है कि MySQL स्टोर की गई प्रक्रिया में जो भी आखिरी स्टेटमेंट है, ऐसा लगता है कि उस प्रक्रिया के परिणाम सेट के रूप में क्या माना जाता है। दुर्भाग्य से, ऐसा लगता है कि MySQL डॉक्स में संदर्भ हैं जो कहते हैं कि एक प्रक्रिया कई परिणाम सेट लौटा सकती है। यह व्यवहार कैसे शुरू होता है? मैं MySQL सर्वर को कैसे बता सकता हूं कि मैं स्पष्ट रूप से केवल एक परिणाम सेट लौटना चाहता हूं?

(उदाहरण के लिए, मेरे पास एक क्वेरी है जो एक SELECT और कुछ आवेषण करता है। मैं ग्राहकों को आवेषण के बारे में नहीं बताना चाहता, लेकिन मैं चाहता हूं कि ग्राहक को SELECT का परिणाम सेट दिया जाए ...।

जवाबों:


17

प्रत्येक चयन कथन जो तालिका या चर में सम्मिलित नहीं होता है, परिणाम सेट करेगा।

यदि आप चाहते हैं कि आपकी संग्रहीत प्रक्रिया केवल एक परिणाम सेट लौटाए, तो सुनिश्चित करें कि आपके पास केवल एक चयन कथन है। यदि आपके पास अन्य सेलेक्ट स्टेटमेंट हैं, तो सुनिश्चित करें कि वे परिणाम तालिका या चर में डालें।

अद्यतन
यहाँ संग्रहीत प्रक्रियाओं के उदाहरण हैं।

यह संग्रहीत कार्यविधि एक परिणाम सेट लौटाएगी:

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;
END;;
DELIMITER ;

यह संग्रहीत कार्यविधि दो परिणाम सेट लौटाएगी:

DELIMITER ;;
CREATE DEFINER=CURRENT_USER PROCEDURE stored_procedure_name()
BEGIN
    DECLARE local_variable_name INT;

    SELECT column_name FROM table_1 LIMIT 1 INTO local_variable_name;

    SELECT * FROM table_1;

    SELECT * FROM table_2;
END;;
DELIMITER ;

आह, तो अगर यह एक तालिका या चर में चला जाता है, तो यह एक परिणाम के रूप में शामिल नहीं होता है? कोई कैसे पहुंचता है; उदाहरण के लिए चयन करें का उपयोग कर?
बिली ओनेल

पहले प्रश्न के लिए हाँ। मैं आपके दूसरे प्रश्न पर स्पष्ट नहीं हूं। यदि मैं किसी स्थानीय चर में मान को संग्रहीत प्रक्रिया के भीतर से बचाना चाहता हूं, तो मैं कुछ इस तरह से चलाता हूं SELECT column_name LIMIT 1 INTO local_variable_name;:।
dabest1

ऊपर नमूना नमूना होना चाहिए SELECT column_name FROM table LIMIT 1 INTO local_variable_name;:।
dabest1

अगर मैं किसी अन्य संग्रहीत कार्यविधि से कॉल store_procedure_name के बाद वैरिएबल प्राप्त करना चाहता हूं, तो मैं परिणाम = कॉल store_procedure_name () सेट नहीं कर सकता ?, इसे कैसे हल करें? यदि मैं कर्सर का उपयोग करता हूं, तो कॉल get_info_user_visitstatistics () सिंटैक्स त्रुटि
अमिताभ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.