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 ;
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');
此类问题的一般答案是所有 MySQL 数据库都包含一个名为information_schema的数据库,其中包含所有元数据作为您可以查询的表。
您需要的信息位于名为ROUTINES的表中。例如:
请参阅相关的 StackOverflow 问题。
使用以下功能:
从盖乌斯的答案中分离出来
另一种最新方式:
如果您只想要一个特定的程序: