sql >> Databasteknik >  >> RDS >> Mysql

2 sätt att lista alla funktioner i MySQL

Nedan finns två alternativ som vi kan använda för att returnera en lista över funktioner i MySQL.

SHOW FUNCTION STATUS Kommando

Det snabbaste sättet att lista ut alla funktioner är att använda SHOW FUNCTION STATUS kommando.

Kör följande för att lista alla funktioner:

SHOW FUNCTION STATUS;

Syntaxen ser ut så här:

SHOW FUNCTION STATUS
    [LIKE 'pattern' | WHERE expr]

Så du kan använda en LIKE eller WHERE klausul för att begränsa resultaten.

Exempel:

SHOW FUNCTION STATUS LIKE '%test%';

Exempelresultat:

+----------+---------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db       | Name          | Type     | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+----------+---------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| PetHotel | test_function | FUNCTION | [email protected] | 2021-11-29 08:09:26 | 2021-11-29 08:09:26 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
+----------+---------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

Vi kan använda WHERE sats för att filtrera resultaten efter kolumner. Till exempel kan vi filtrera resultaten till en given databas:

SHOW FUNCTION STATUS WHERE db = 'sakila';

Exempelresultat:

+--------+----------------------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db     | Name                       | Type     | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+--------+----------------------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| sakila | get_customer_balance       | FUNCTION | [email protected] | 2021-11-29 08:04:31 | 2021-11-29 08:04:31 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
| sakila | inventory_held_by_customer | FUNCTION | [email protected] | 2021-11-29 08:04:31 | 2021-11-29 08:04:31 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
| sakila | inventory_in_stock         | FUNCTION | [email protected] | 2021-11-29 08:04:31 | 2021-11-29 08:04:31 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
+--------+----------------------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

SHOW FUNCTION STATUS kommandot fungerar mycket som SHOW PROCEDURE STATUS kommando, som returnerar en lista över lagrade procedurer.

information_schema.routines Tabell

Ett annat sätt att få en lista över funktioner 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 = 'FUNCTION'
ORDER BY 
    routine_schema ASC, 
    routine_name ASC;

Den här tabellen lagrar också information om lagrade procedurer. I exemplet ovan uteslöt jag dessa genom att använda en WHERE sats för att endast returnera funktioner (d.v.s. objekt med en routine_type av FUNCTION ).

För att inkludera lagrade procedurer 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å begränsa den till en specifik databas:

SELECT 
    routine_schema as "Database",
    routine_name,
    routine_type
FROM 
    information_schema.routines
WHERE 
    routine_schema = 'pethotel'
ORDER BY 
    routine_name ASC;

Exempelresultat:

+----------+---------------+--------------+
| Database | ROUTINE_NAME  | ROUTINE_TYPE |
+----------+---------------+--------------+
| PetHotel | spGetAllPets  | PROCEDURE    |
| PetHotel | spGetPetById  | PROCEDURE    |
| PetHotel | test_function | FUNCTION     |
+----------+---------------+--------------+


  1. Återställ mysql-databasen från .frm-filer

  2. Postgres unika begränsning vs index

  3. Vad kräver detta JavaScript?

  4. ta bort SQLite-databas när du uppdaterar ny version av programmet