कोड-मॉन्क ने जो लिखा है, उस पर काम करते हुए, निम्नलिखित पर विचार करें:
drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
drop temporary table if exists temp; -- could be some other random structure residue
create temporary table temp
SELECT aID, bID
FROM tags
WHERE placeID = "abc" AND tagID = "def";
-- use the temp table somehow
-- ...
-- ...
-- ...
drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter
संग्रहीत प्रक्रिया का परीक्षण करें
call uspK(); -- test it, no warnings on edge conditions
क्या नहीं करें
कोई नहीं होगा निम्नलिखित के साथ बहुत भाग्य खोजें। अगर आपको ऐसा लगता है, तो इसे कुछ बार चलाएं;
drop procedure if exists uspK;
DELIMITER $$
create procedure uspK ()
BEGIN
-- drop temporary table if exists temp;
create temporary table if not exists temp
SELECT aID, bID
FROM tags
WHERE placeID = "abc" AND tagID = "def";
-- use the temp table somehow
-- ...
-- ...
-- ...
-- drop temporary table temp; -- otherwise it survives the stored proc call
END
$$ -- signify end of block
DELIMITER ; -- reset to default delimiter
क्योंकि create temporary table if not exists temp
परतदार है
सामान्य टिप्पणियाँ
DELIMITERS के सरल विषय पर कुछ हद तक धाराप्रवाह होने तक किसी को संग्रहित प्रोक्स लिखने में नहीं आना चाहिए। उनके बारे में यहां एक खंड में लिखा है सीमांकक . कहा जाता है . इस तरह की एक साधारण चीज़ पर अनावश्यक बर्बाद समय से आपको दूर करने की उम्मीद में, डिबगिंग का बहुत समय बर्बाद कर सकता है।
साथ ही, यहां आपके प्रश्न के साथ-साथ उस संदर्भ में, ध्यान रखें कि तालिकाओं का निर्माण DDL है जो कर सकते हैं समग्र रूपरेखा (प्रदर्शन) का एक बड़ा प्रतिशत है। यह पूर्व-मौजूदा तालिका का उपयोग करके एक खरीद बनाम धीमा कर देता है। कोई सोच सकता है कि कॉल तात्कालिक है, लेकिन ऐसा नहीं है। जैसे, प्रदर्शन के लिए, पहले से मौजूद तालिका का उपयोग करके परिणामों को अपनी खंडित पंक्ति में डाल दिया जाता है Id स्थायी DDL ओवरहेड की तुलना में बहुत तेज़ है।