Poniżej znajdują się dwie opcje zwracania pełnej listy procedur składowanych w MySQL.
SHOW PROCEDURE STATUS
Polecenie
Najszybszym sposobem wyświetlenia listy wszystkich procedur składowanych jest użycie SHOW PROCEDURE STATUS
polecenie.
Po prostu uruchom następujące polecenie, aby wyświetlić wszystkie procedury składowane:
SHOW PROCEDURE STATUS;
Składnia wygląda tak:
SHOW PROCEDURE STATUS
[LIKE 'pattern' | WHERE expr]
Możesz więc użyć LIKE
lub WHERE
klauzula, aby zawęzić wyniki.
Przykład:
SHOW PROCEDURE STATUS LIKE 'albums%';
Wynik:
+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation | +-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | Music | spAlbumsByGenre | PROCEDURE | [email protected] | 2021-11-13 13:09:26 | 2021-11-13 13:09:26 | DEFINER | | utf8mb4 | utf8mb4_0900_ai_ci | utf8mb4_0900_ai_ci | | Music | spAlbumsFromArtistId | PROCEDURE | [email protected] | 2021-11-13 13:03:25 | 2021-11-13 13:03:25 | DEFINER | | utf8mb4 | utf8mb4_0900_ai_ci | utf8mb4_0900_ai_ci | | Music | spAlbumsFromArtistName | PROCEDURE | [email protected] | 2021-11-13 13:03:48 | 2021-11-13 13:03:48 | DEFINER | | utf8mb4 | utf8mb4_0900_ai_ci | utf8mb4_0900_ai_ci | +-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
information_schema.routines
Tabela
Innym sposobem uzyskania listy procedur składowanych w MySQL jest zapytanie o information_schema.routines
tabela.
Przykład:
SELECT
routine_schema as "Database",
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
ORDER BY
routine_schema ASC,
routine_name ASC;
Ta tabela przechowuje również informacje o przechowywanych funkcjach. W powyższym przykładzie wykluczyłem je za pomocą WHERE
klauzula zwracająca tylko procedury składowane (tj. obiekty z routine_type
z PROCEDURE
).
Aby uwzględnić zapisane funkcje, możemy usunąć WHERE
klauzula:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
ORDER BY
routine_schema ASC,
routine_name ASC;
W tym przypadku dodałem również routine_type
kolumna, abyśmy mogli rozróżnić procedury i funkcje.
Możemy również wykluczyć niektóre bazy danych z wyniku:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema NOT IN ('sys', 'information_schema', 'mysql', 'performance_schema')
ORDER BY
routine_schema ASC,
routine_name ASC;
Oto, co to zwraca w moim środowisku testowym:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | | PetHotel | spGetAllPets | PROCEDURE | | PetHotel | spGetPetById | PROCEDURE | +----------+------------------------+--------------+
Możemy również zawęzić go do konkretnej bazy danych:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema = 'music'
ORDER BY
routine_name ASC;
Wynik:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | +----------+------------------------+--------------+