2013-01-07 15 views
13

प्रश्न के साथ प्रश्न! जब मैं सब ठीक से जादू करता हूं, तो समस्या दूर हो जाती है!MySQL संग्रहीत प्रक्रिया में बनाए गए अस्थायी सारणी का दायरा

मेरे पास एक MySQL संग्रहीत प्रक्रिया है जो एक अस्थायी तालिका बनाता है। जब मैं mysql प्रॉम्प्ट से प्रक्रिया को कॉल करता हूं, तो यह सफलतापूर्वक चल रहा है, लेकिन यदि मैं अस्थायी तालिका से COUNT (*) चुनता हूं, तो मुझे यह कहते हुए एक त्रुटि मिलती है कि तालिका मौजूद नहीं है।

क्या संग्रहीत प्रक्रिया समाप्त होने पर संग्रहीत प्रक्रिया के अंदर बनाई गई एक अस्थायी तालिका मौजूद है?

mysql> delimiter // 
mysql> drop procedure if exists sp_temp_reciepts// 
mysql> create procedure sp_temp_receipts() 
begin 
    drop temporary table if exists receipts; 
    create temporary table receipts 
    ( ... snip ... 
); 
    insert into receipts 
    select ... snip ... 
end// 
mysql> delimiter ; 
mysql> call sp_temp_reciepts(); 
Query OK, 46903 rows affected, 1 warning (2.15 sec) 
mysql> select count(*) from receipts; 
ERROR 1146 (42S02): Table 'receipts' doesn't exist 
+0

नहीं। यह अभी भी वहां है। क्या आप यहां कोड शामिल कर सकते हैं? – ethrbunny

+0

डिलीमीटर // ड्रॉप प्रक्रिया अगर मौजूद है sp_temp_reciepts // प्रक्रिया बनाएं sp_temp_receipts() – user1956095

+0

कोड को शामिल करने के लिए कृपया अपनी मूल पोस्ट संपादित करें। – ethrbunny

उत्तर

13

यह प्रश्न एक वर्ष से अधिक पुराना है। यह एक जवाब का हकदार है। यहां यह जाता है:

मैंने आज इस प्रश्न को डीबीए स्टैक एक्सचेंज में देखा: How long will a temporary MEMORY table persist if I don't drop it (MySQL)। मैंने अभी जवाब दिया। भाग में मैं इस ने कहा:

को the Book

kdsjx

अध्याय 5 अनुसार एक उपशीर्षक एक और संग्रहित प्रक्रिया पर वापस लौटते हुए परिणाम समूह है।

यह पृष्ठ 117 पर पैरा 2 में कहते हैं:

दुर्भाग्य से, एक ही रास्ता एक परिणाम के एक संग्रहीत प्रक्रिया से दूसरे सेट पारित करने के लिए एक अस्थायी तालिका के माध्यम से परिणाम पारित करने के लिए है। यह एक अजीब समाधान बी है, और - क्योंकि अस्थायी तालिका में पूरे सत्र में गुंजाइश है - यह वैश्विक चर के उपयोग से उठाए गए समान रखरखाव के कई मुद्दों को बनाता है। लेकिन यदि एक संग्रहीत कार्यक्रम को परिणामों के साथ एक और संग्रहीत कार्यक्रम की आपूर्ति करने की आवश्यकता है, तो एक अस्थायी तालिका सबसे अच्छा समाधान हो सकता है।

हालांकि तालिका गलत वर्तनी के कारण प्रश्न गिरा दिया गया था, लेकिन इस दृष्टिकोण को उन सभी लोगों द्वारा व्यक्त और सीखा जाना चाहिए जो MySQL संग्रहीत प्रक्रियाओं को कॉल करते हैं और उनके डेटा की आवश्यकता होती है।

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