Di seguito sono riportate due opzioni per restituire un elenco completo di stored procedure in MySQL.
Il SHOW PROCEDURE STATUS
Comando
Il modo più rapido per elencare tutte le stored procedure è utilizzare SHOW PROCEDURE STATUS
comando.
Basta eseguire quanto segue per elencare tutte le stored procedure:
SHOW PROCEDURE STATUS;
La sintassi è questa:
SHOW PROCEDURE STATUS
[LIKE 'pattern' | WHERE expr]
Quindi puoi usare un LIKE
o WHERE
clausola per restringere i risultati.
Esempio:
SHOW PROCEDURE STATUS LIKE 'albums%';
Risultato:
+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | 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 | +-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
Il information_schema.routines
Tabella
Un altro modo per ottenere un elenco di stored procedure in MySQL è eseguire una query su information_schema.routines
tabella.
Esempio:
SELECT
routine_schema as "Database",
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
ORDER BY
routine_schema ASC,
routine_name ASC;
Questa tabella memorizza anche informazioni sulle funzioni memorizzate. Nell'esempio sopra, li ho esclusi usando un WHERE
clausola per restituire solo stored procedure (ovvero oggetti con un routine_type
di PROCEDURE
).
Per includere le funzioni memorizzate possiamo rimuovere il WHERE
clausola:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
ORDER BY
routine_schema ASC,
routine_name ASC;
In questo caso ho anche aggiunto il routine_type
colonna in modo da poter distinguere tra le procedure e le funzioni.
Possiamo anche escludere alcuni database dal risultato:
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;
Ecco cosa restituisce nel mio ambiente di test:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | | PetHotel | spGetAllPets | PROCEDURE | | PetHotel | spGetPetById | PROCEDURE | +----------+------------------------+--------------+
Possiamo anche restringerlo a un database specifico:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema = 'music'
ORDER BY
routine_name ASC;
Risultato:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | +----------+------------------------+--------------+