sql >> Databasteknik >  >> RDS >> Mysql

2 sätt att lista alla lagrade procedurer i MySQL

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    |
+----------+------------------------+--------------+

  1. SQL Server Index Användningsstatistik

  2. Undantag i huvudtråden java.sql.SQLEUndantag:Åtkomst nekad för användare ''@'localhost' (med lösenord:NO)

  3. Hitta längden på den längsta raden i en kolumn i orakel

  4. Oracle WHILE LOOP Exempel