Nedan finns två alternativ för att returnera en fullständig lista över lagrade procedurer i MySQL.
SHOW PROCEDURE STATUS
Kommando
Det snabbaste sättet att lista ut alla lagrade procedurer är att använda SHOW PROCEDURE STATUS
kommando.
Kör helt enkelt följande för att lista alla lagrade procedurer:
SHOW PROCEDURE STATUS;
Syntaxen ser ut så här:
SHOW PROCEDURE STATUS
[LIKE 'pattern' | WHERE expr]
Så du kan använda en LIKE
eller WHERE
klausul för att begränsa resultaten.
Exempel:
SHOW PROCEDURE STATUS LIKE 'albums%';
Resultat:
+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | 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
Tabell
Ett annat sätt att få en lista över lagrade procedurer i MySQL är att fråga information_schema.routines
bord.
Exempel:
SELECT
routine_schema as "Database",
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
ORDER BY
routine_schema ASC,
routine_name ASC;
Den här tabellen lagrar även information om lagrade funktioner. I exemplet ovan uteslöt jag dessa genom att använda en WHERE
sats för att endast returnera lagrade procedurer (d.v.s. objekt med en routine_type
av PROCEDURE
).
För att inkludera lagrade funktioner kan vi ta bort WHERE
klausul:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
ORDER BY
routine_schema ASC,
routine_name ASC;
I det här fallet lade jag också till routine_type
kolumn så att vi kan skilja mellan procedurerna och funktionerna.
Vi kan också exkludera vissa databaser från resultatet:
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;
Det här returnerar i min testmiljö:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | | PetHotel | spGetAllPets | PROCEDURE | | PetHotel | spGetPetById | PROCEDURE | +----------+------------------------+--------------+
Vi kan också begränsa den till en specifik databas:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema = 'music'
ORDER BY
routine_name ASC;
Resultat:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | +----------+------------------------+--------------+