Come faccio a sapere se esiste una procedura o una funzione in un database mysql?


18

Come faccio a sapere se esiste una procedura o una funzione in un database mysql? e c'è qualche opzione di scoperta? come un show procedures;(es. come show tables;)

Risposte:



26

Una risposta generica a questo tipo di domanda è che tutti i database MySQL includono un database chiamato information_schema che include tutti i metadati come tabelle su cui puoi semplicemente interrogare.

Le informazioni desiderate sono in una tabella chiamata ROUTINES . Per esempio:

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

4
Questo funziona anche in Oracle e SQL Server. Penso che
faccia

1
Ricorda che ciò può essere influenzato dalle autorizzazioni: vedrai l'elenco delle procedure a cui hai accesso. Questo mi ha lasciato brevemente quando ho ottenuto un elenco parziale su una connessione (usando un nome utente più limitato) e un elenco diverso su un'altra connessione.
Geoffrey Wiseman,

1

utilizzare la seguente funzione:

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
Questo è un po 'complicato, vedi la risposta di Gaius.
dezso

0

Spin Off della risposta di 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');
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.