2013-07-30 7 views
15

मैं पिछले एकाध घंटे के लिए देख रहे हैं और इस कदाचित सरल समस्या के लिए एक निर्णायक उत्तर नहीं मिला, से टेबल उत्पादन उपयोग कैसे करें:संग्रहीत MYSQL प्रक्रिया

आप कैसे एक संग्रहीत MYSQL समारोह कहते हैं/प्रक्रिया और आगे के चयन प्रश्नों में अपने आउटपुट का उपयोग करें?


हालांकि यह स्पष्ट रूप से काम नहीं करता है, इस बात की तरह मैं करना चाहते हैं यह है:

SELECT P.`id` FROM (CALL test_proc()) AS P 

कहाँ test_proc() द्वारा परिभाषित किया गया है:

DROP PROCEDURE IF EXISTS test_proc; 
DELIMITER ;; 
CREATE PROCEDURE test_proc() 
BEGIN 
    SELECT * FROM `table`; 
END;; 
DELIMITER ; 

बस एक उदाहरण के रूप में। मैं एक संग्रहीत समारोह का उपयोग करने के साथ भी ठीक होगा।

उत्तर

17

यह सीधे नहीं किया जा सकता है, क्योंकि संग्रहीत प्रक्रिया में एक निर्बाध चयन का आउटपुट क्लाइंट को भेजा गया परिणाम परिणाम है, लेकिन तकनीकी रूप से एक तालिका नहीं है।

कामकाज यह है कि proc को आपके लिए टेबल बनाने के बाद डेटा को अस्थायी तालिका में डालने दें। प्रक्रिया समाप्त होने पर यह तालिका केवल आपके कनेक्शन पर उपलब्ध होगी। अगर कोई और एक ही समय में प्रोसेस चलाता है तो यह कोई संघर्ष नहीं करेगा और किसी अन्य कनेक्शन के लिए दृश्यमान नहीं होगा।

प्रक्रिया को यह करें:

DROP TEMPORARY TABLE IF EXISTS foo; 
CREATE TEMPORARY TABLE foo SELECT ... your existing select query here ...; 

जब आपके प्रक्रिया पूर्ण होने पर, SELECT * FROM foo; आप दे देंगे क्या तुम क्या आप proc से प्राप्त होंगे। आप इसमें किसी भी तालिका की तरह काफी शामिल हो सकते हैं।

जब आप पूरा कर लें, इसे छोड़ दें, या डिस्कनेक्ट होने पर यह अपने आप से दूर हो जाएगा। यदि आप फिर से प्रो चलाते हैं, तो इसे गिरा दिया जाएगा और फिर से बनाया जाएगा।

+0

चीयर्स, वही है जो मैं देख रहा था :) – Johannes

+0

मैं अस्थायी तालिका बनाते समय test_proc() को कैसे कॉल कर सकता हूं। मैं तर्क को एसपी में अलग रखना चाहता हूं और temp तालिका –

+0

@ हिमालय गर्ग के साथ चुनिंदा वक्तव्यों को मिश्रित नहीं करना चाहता हूं, कृपया बताएं कि आपका मतलब क्या है * "बनाते समय" * - क्या आपका मतलब है कि कॉल से परिणाम का उपयोग करने वाले टेम्पलेट टेबल टी 1 बनाना test_proc() '? क्षमा करें, मैंने अभी इसे बनाया है। ऐसा कोई वाक्यविन्यास नहीं है। कृपया बताएं कि आप क्या करने की कोशिश कर रहे हैं। –

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