ฉันจะรู้ได้อย่างไรว่ามีกระบวนการหรือฟังก์ชั่นอยู่ในฐานข้อมูล mysql หรือไม่?


18

ฉันจะรู้ได้อย่างไรว่ามีกระบวนการหรือฟังก์ชั่นอยู่ในฐานข้อมูล MySQL หรือไม่? และมีตัวเลือกการค้นพบใด ๆ ชอบshow procedures;(เช่นชอบshow tables;)

คำตอบ:



26

คำตอบทั่วไปของคำถามประเภทนี้คือฐานข้อมูล MySQL ทั้งหมดมีฐานข้อมูลที่เรียกว่าinformation_schemaซึ่งรวมข้อมูลเมตาทั้งหมดเป็นตารางที่คุณสามารถสืบค้นได้

ข้อมูลที่คุณต้องการคือในตารางที่เรียกว่าการปฏิบัติ ตัวอย่างเช่น:

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

4
สิ่งนี้ยังทำงานใน Oracle และ SQL Server ฉันคิดว่ามันเป็นส่วนหนึ่งของมาตรฐาน ANSI
Conrad Frix

1
โปรดทราบว่าสิ่งนี้อาจได้รับผลกระทบจากการอนุญาต - คุณจะเห็นรายการของขั้นตอนที่คุณสามารถเข้าถึงเพื่อดู สิ่งนี้ทำให้ฉันสั้นลงเมื่อฉันได้รับรายชื่อบางส่วนในการเชื่อมต่อหนึ่ง (โดยใช้ชื่อผู้ใช้ที่ จำกัด มากขึ้น) และรายการอื่นในการเชื่อมต่ออื่น
Geoffrey Wiseman

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
นี่มันค่อนข้างซับซ้อนเกินไปดูคำตอบของ Gaius
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');
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.