Níže jsou dvě možnosti, jak vrátit úplný seznam uložených procedur v MySQL.
SHOW PROCEDURE STATUS Příkaz
Nejrychlejší způsob, jak vypsat všechny uložené procedury, je použít SHOW PROCEDURE STATUS příkaz.
Jednoduše spusťte následující, abyste vypsali všechny uložené procedury:
SHOW PROCEDURE STATUS; Syntaxe vypadá takto:
SHOW PROCEDURE STATUS
[LIKE 'pattern' | WHERE expr]
Můžete tedy použít LIKE nebo WHERE klauzule pro zúžení výsledků.
Příklad:
SHOW PROCEDURE STATUS LIKE 'albums%'; Výsledek:
+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation | +-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | Music | spAlbumsByGenre | PROCEDURE | example@sqldat.com | 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 | example@sqldat.com | 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 | example@sqldat.com | 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 Tabulka
Dalším způsobem, jak získat seznam uložených procedur v MySQL, je dotaz na information_schema.routines tabulka.
Příklad:
SELECT
routine_schema as "Database",
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
ORDER BY
routine_schema ASC,
routine_name ASC;
Tato tabulka také obsahuje informace o uložených funkcích. Ve výše uvedeném příkladu jsem je vyloučil pomocí WHERE klauzule k vrácení pouze uložených procedur (tj. objektů s routine_type z PROCEDURE ).
Chcete-li zahrnout uložené funkce, můžeme odstranit WHERE klauzule:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
ORDER BY
routine_schema ASC,
routine_name ASC;
V tomto případě jsem také přidal routine_type abychom mohli rozlišovat mezi procedurami a funkcemi.
Z výsledku můžeme také vyloučit určité databáze:
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; V mém testovacím prostředí to vrací toto:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | | PetHotel | spGetAllPets | PROCEDURE | | PetHotel | spGetPetById | PROCEDURE | +----------+------------------------+--------------+
Můžeme to také zúžit na konkrétní databázi:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema = 'music'
ORDER BY
routine_name ASC; Výsledek:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | +----------+------------------------+--------------+