it-swarm.com.de

Wie finde ich heraus, ob eine Prozedur oder Funktion in einer MySQL-Datenbank vorhanden ist?

Wie finde ich heraus, ob eine Prozedur oder Funktion in einer MySQL-Datenbank vorhanden ist? und gibt es eine Entdeckungsoption? wie ein show procedures; (z. B. wie show tables;)

18
xenoterracide
SHOW PROCEDURE STATUS
SHOW FUNCTION STATUS

Siehe verwandte StackOverflow-Frage .

19
BenV

Eine allgemeine Antwort auf diese Art von Frage lautet, dass alle MySQL-Datenbanken eine Datenbank mit dem Namen information_schema enthalten, die alle Metadaten als Tabellen enthält, die Sie einfach abfragen können.

Die gewünschten Informationen befinden sich in einer Tabelle mit dem Namen ROUTINEN . Zum Beispiel:

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

verwenden Sie die folgende Funktion:

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 der Antwort von 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