如何确定mysql数据库中是否存在过程或函数?


18

如何确定mysql数据库中是否存在过程或函数?并且有任何发现选项吗?像show procedures;(例如show tables;

Answers:



26

对这种类型问题的一个通用答案是,所有MySQL数据库都包含一个名为information_schema的数据库,该数据库包含所有元数据作为您可以查询的表。

所需的信息在名为ROUTINES的表中。例如:

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

4
这也适用于Oracle和SQL Server。我认为它的ANSI标准的一部分
康拉德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 2012年

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');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.