ฉันจะรู้ได้อย่างไรว่ามีกระบวนการหรือฟังก์ชั่นอยู่ในฐานข้อมูล MySQL หรือไม่? และมีตัวเลือกการค้นพบใด ๆ ชอบshow procedures;
(เช่นชอบshow tables;
)
ฉันจะรู้ได้อย่างไรว่ามีกระบวนการหรือฟังก์ชั่นอยู่ในฐานข้อมูล MySQL หรือไม่? และมีตัวเลือกการค้นพบใด ๆ ชอบshow procedures;
(เช่นชอบshow tables;
)
คำตอบ:
SHOW PROCEDURE STATUS
SHOW FUNCTION STATUS
ดูที่เกี่ยวข้องกับคำถาม StackOverflow
คำตอบทั่วไปของคำถามประเภทนี้คือฐานข้อมูล MySQL ทั้งหมดมีฐานข้อมูลที่เรียกว่าinformation_schemaซึ่งรวมข้อมูลเมตาทั้งหมดเป็นตารางที่คุณสามารถสืบค้นได้
ข้อมูลที่คุณต้องการคือในตารางที่เรียกว่าการปฏิบัติ ตัวอย่างเช่น:
SELECT ROUTINE_NAME
FROM INFORMATION_SCHEMA.ROUTINES
WHERE
ROUTINE_TYPE="PROCEDURE"
AND ROUTINE_SCHEMA="dbname"
;
ใช้ฟังก์ชั่นต่อไปนี้:
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 ;
หมุนออกจากคำตอบจาก 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');