मुझे कैसे पता चलेगा कि कोई प्रक्रिया या फ़ंक्शन किसी mysql डेटाबेस में मौजूद है?


18

मुझे कैसे पता चलेगा कि कोई प्रक्रिया या फ़ंक्शन किसी mysql डेटाबेस में मौजूद है? और क्या कोई खोज विकल्प है? जैसे show procedures;(जैसे show tables;)

जवाबों:



26

प्रश्न के इस प्रकार के लिए एक सामान्य जवाब है कि सभी MySQL डेटाबेस एक डेटाबेस बुलाया शामिल है INFORMATION_SCHEMA जो तालिकाओं के रूप में सभी मेटाडाटा तुम सिर्फ क्वेरी कर सकते हैं शामिल हैं।

आपकी इच्छित जानकारी ROUTINES नामक तालिका में है । उदाहरण के लिए:

SELECT ROUTINE_NAME 
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE 
       ROUTINE_TYPE="PROCEDURE" 
   AND ROUTINE_SCHEMA="dbname"
;

4
यह Oracle और SQL Server में भी काम करता है। मुझे लगता है कि इसका एक एएनएसआई मानक का हिस्सा है
कॉनरेड फ्राक्स

1
ध्यान रखें कि यह अनुमतियों से प्रभावित हो सकता है - आप उन प्रक्रियाओं की सूची देखेंगे जिन्हें आपके पास देखने के लिए पहुंच है। जब मैंने एक कनेक्शन पर एक आंशिक सूची (एक अधिक सीमित उपयोगकर्ता नाम का उपयोग करके) और दूसरे कनेक्शन पर एक अलग सूची प्राप्त की, तो मुझे संक्षेप में फेंक दिया।
जेफ्री वाइसमैन

1

निम्नलिखित फ़ंक्शन का उपयोग करें:

DELIMITER $$

DROP FUNCTION IF EXISTS f_exists_procedure;$$
CREATE FUNCTION f_exists_procedure(in_name VARCHAR(255))
RETURNS BIT DETERMINISTIC
BEGIN
    SELECT COUNT(1) INTO @f_result
    FROM information_schema.ROUTINES as info
    WHERE info.ROUTINE_SCHEMA = DATABASE() AND info.ROUTINE_TYPE = 'PROCEDURE' AND info.ROUTINE_NAME = in_name;

    RETURN @f_result;

END;$$

DELIMITER ;

1
यह थोड़ा अधिक है, गयुस का जवाब देखें।
dezso

0

Gaius से जवाब का स्पिन ऑफ

SELECT IF( COUNT(*) = 0, 'F' , 'T' ) AS ProcedureExists
FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_SCHEMA = 'someDBName'
AND ROUTINE_TYPE = 'PROCEDURE'
AND UCASE(ROUTINE_NAME) = UCASE('someProcedureName');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.