Jak sprawdzić, czy procedura lub funkcja istnieje w bazie danych mysql?


18

Jak się dowiedzieć, czy procedura lub funkcja istnieje w bazie danych mysql? i czy jest jakaś opcja wykrywania? jak show procedures;(np. jak show tables;)

Odpowiedzi:



26

Ogólna odpowiedź na tego typu pytania jest taka, że ​​wszystkie bazy danych MySQL zawierają bazę danych o nazwie schemat_informacji, która zawiera wszystkie metadane jako tabele, które można po prostu zapytać.

Potrzebne informacje znajdują się w tabeli o nazwie ROUTINES . Na przykład:

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

4
Działa to również w Oracle i SQL Server. Myślę, że jest to część standardu ANSI
Conrad Frix 13.01.11

1
Pamiętaj, że na to mogą mieć wpływ uprawnienia - zobaczysz listę procedur, do których masz dostęp. Wyrzuciło mnie to na chwilę, gdy otrzymałem częściową listę na jednym połączeniu (używając bardziej ograniczonej nazwy użytkownika) i inną listę na innym połączeniu.
Geoffrey Wiseman

1

użyj następującej funkcji:

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
Jest to nieco skomplikowane, patrz odpowiedź Gajusza.
dezso,

0

Oddziel odpowiedź Gajusza

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');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.