MySQL में संग्रहीत कार्यविधि / फ़ंक्शन परिभाषा देखें


79

sp_helptextMicrosoft SQL सर्वर के समान संग्रहीत कार्यविधि या फ़ंक्शन की परिभाषा देखने के लिए MySQL कमांड क्या है ?

मुझे पता है कि SHOW PROCEDURE STATUSउपलब्ध प्रक्रियाओं की सूची प्रदर्शित करेगा। मुझे एकल प्रक्रिया की परिभाषा देखने की जरूरत है।


2
चयन करें * FOM mysql.proc \ G;
15:25 बजे ज़्लॉक्ट

जवाबों:


123
SHOW CREATE PROCEDURE <name>

पहले से परिभाषित संग्रहीत कार्यविधि का पाठ लौटाता है जो CREATE PROCEDUREकथन का उपयोग करके बनाया गया था । स्वैप PROCEDUREके लिए FUNCTIONएक संग्रहीत समारोह के लिए।


मुझे मिल रहा है#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
गोविंद सिंह

+1 यह अब तीन बार मेरी मदद कर चुका है। इन दिनों में से एक को मैं दिल से याद करूंगा।
रजिस्टर्ड यूजर

3
यह तब तक काम नहीं करेगा जब तक कि मैसकल को संकलित नहीं किया जाता है - साथ-डिबग। तो यह AWS RDS उदाहरणों पर काम नहीं करता है। शो बनाने की प्रक्रिया 'xxxx' की कोशिश करें; नीचे @valli के रूप में
क्रिस

39

आप इसका उपयोग कर सकते हैं:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";

9
दुर्भाग्य से ROUTINE_DEFINITION में संग्रहीत कार्यविधि के IN / OUT पैरामीटर और न ही रिटर्न मान शामिल नहीं हैं (जबकि SHOW CREATE PROCEDURE करता है)। यदि आप उन लोगों को प्राप्त करना चाहते हैं, तो आप सीधे mysql.proc, जैसे SELECT param_list, रिटर्न, बॉडी से mysql.proc के लिए सीधे क्वेरी कर सकते हैं, जहां db = 'yourdb' और '= PROCUREURE' और नाम = 'processurename' टाइप करें;
२०

से कि क्वेरी @GregW mysql.procरिटर्न धब्बे के लिए param_list, returnsऔर body... मैं कर रहा हूँ उन्हें पढ़ने में असमर्थ ... आप इसे कैसे किया?
दिमित्री एफिमेंको


2
ध्यान रखें ROUTINE_DEFINITION शून्य होगा यदि क्वेरी चलाने वाला उपयोगकर्ता DEFINER नहीं है और सुरक्षा DEFINER पर सेट है। यदि आपको INVOKER पर सुरक्षा सेट है तो आपको कोई समस्या नहीं होगी। तुम भी से पैरामीटर प्राप्त कर सकते हैं SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA='$dbName' AND SPECIFIC_NAME=\"{$row['ROUTINE_NAME']}\" AND NOT PARAMETER_MODE IS NULL ORDER BY ORDINAL_POSITION;
पीटर ब्रांड

सुधार, भले ही सुरक्षा INVOKER के लिए सेट की गई हो, अगर परिभाषा क्वेरी चलाने वाले उपयोगकर्ता के लिए समान नहीं है, तो परिभाषा शून्य होगी।
पीटर ब्रांड

10
SHOW CREATE PROCEDURE proc_name;

की परिभाषा देता है proc_name


यह प्रक्रिया का पाठ नहीं दिखाता है।
posfan12

मेरे लिये कार्य करता है। मैं AWS / RDS सर्वर रहित का उपयोग कर रहा हूँ। Proc text Create Procedure कॉलम को दिखाता है।
KingAndrew

10

यदि आप प्रक्रियाओं की सूची जानना चाहते हैं, तो आप निम्नलिखित कमांड चला सकते हैं -

show procedure status;

यह आपको प्रक्रियाओं और उनके परिभाषाओं की सूची देगा फिर आप इसे चला सकते हैं show create procedure <procedurename>;


7

आप तालिका का उपयोग कर सकते proc डेटाबेस में mysql :

mysql> SELECT body FROM mysql.proc
WHERE db = 'yourdb' AND name = 'procedurename' ;

ध्यान दें कि आपके पास mysql.proc को चुनने के लिए अनुदान होना चाहिए :

mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;

5

कुछ इस तरह:

DELIMITER //

CREATE PROCEDURE alluser()
BEGIN
   SELECT *
   FROM users;
END //

DELIMITER ;

से अधिक:

SHOW CREATE PROCEDURE alluser

परिणाम देता है:

'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`()
BEGIN
   SELECT *
   FROM users;
END'

3

एक वैकल्पिक त्वरित और हैकी समाधान यदि आप वहाँ होने वाले सभी ठिकानों का अवलोकन प्राप्त करना चाहते हैं, या केवल प्रक्रिया प्रक्रिया द्वारा दिखाए जाने वाले प्रक्रिया हेडर प्राप्त करने के मुद्दे में भाग लेते हैं:

mysqldump --user=<user> -p --no-data --routines <database>

यह तालिका के विवरणों को भी निर्यात करेगा, लेकिन कोई डेटा नहीं। अज्ञात या भूल गए स्कीमा के आसपास सूँघने के लिए अच्छी तरह से काम करता है ...;)


-2

बिल्कुल सही, यह कोशिश करो:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";

2
एसई में आपका स्वागत है! कृपया अपने उत्तर की व्याख्या करें, विशेष रूप से इस संबंध में कि यह अन्य विद्यमानों से क्या अंतर करता है।
anderas
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.