web-dev-qa-db-fra.com

Comment savoir si une procédure ou une fonction existe dans une base de données mysql?

Comment savoir si une procédure ou une fonction existe dans une base de données mysql? et y a-t-il une option de découverte? comme un show procedures; (par exemple, comme show tables;)

18
xenoterracide
SHOW PROCEDURE STATUS
SHOW FUNCTION STATUS

Voir question StackOverflow associée .

19
BenV

Une réponse générique à ce type de question est que toutes les bases de données MySQL incluent une base de données appelée information_schema qui inclut toutes les métadonnées sous forme de tables que vous pouvez simplement interroger.

Les informations que vous souhaitez se trouvent dans un tableau appelé ROUTINES . Par exemple:

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

utilisez la fonction suivante:

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
sassman

Spin Off de la réponse de 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');
0
user2242225