কোনও প্রক্রিয়া বা ফাংশন কোনও মাইএসকিএল ডাটাবেজে বিদ্যমান কিনা তা আমি কীভাবে জানতে পারি?


18

কোনও প্রক্রিয়া বা ফাংশন কোনও মাইএসকিএল ডাটাবেজে বিদ্যমান কিনা তা আমি কীভাবে জানতে পারি? এবং কোন আবিষ্কার বিকল্প আছে? মত একটিshow procedures; (যেমন মত show tables;)

উত্তর:



26

এই ধরণের প্রশ্নের জেনেরিক উত্তর হ'ল সমস্ত মাইএসকিউএল ডাটাবেসে ইনফরমেশন_সেমিমা নামে একটি ডাটাবেস অন্তর্ভুক্ত থাকে যার মধ্যে আপনি কেবল জিজ্ঞাসা করতে পারেন সারণী হিসাবে সমস্ত মেটাডেটা অন্তর্ভুক্ত রয়েছে।

আপনি যে তথ্যটি চান তা হ'ল রোটিনস নামে একটি সারণীতে । উদাহরণ স্বরূপ:

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

4
এটি ওরাকল এবং এসকিউএল সার্ভারেও কাজ করে। আমি মনে করি এটির একটি এএনএসআই স্ট্যান্ডার্ডের অংশ
কনরাড ফ্রিক্স

1
এটি অনুমতি দ্বারা প্রভাবিত হতে পারে সে সম্পর্কে সচেতন থাকুন - আপনি যে পদ্ধতিতে দেখতে অ্যাক্সেস করেছেন সেগুলির তালিকা আপনি দেখতে পাবেন। যখন আমি একটি সংযোগে আংশিক তালিকা পেয়েছি (আরও সীমাবদ্ধ ব্যবহারকারীর নাম ব্যবহার করছি) এবং অন্য সংযোগে একটি আলাদা তালিকা পেয়েছি তখন এটি আমাকে সংক্ষেপে ফেলে দেয়।
জেফ্রি ওয়াইজম্যান 16

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

গাইউসের কাছ থেকে উত্তরটি স্পিন অফ করুন

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');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.