Mysql
 sql >> Database >  >> RDS >> Mysql

2 modi per elencare tutte le funzioni in MySQL

Di seguito sono riportate due opzioni che possiamo utilizzare per restituire un elenco di funzioni in MySQL.

Il SHOW FUNCTION STATUS Comando

Il modo più rapido per elencare tutte le funzioni è utilizzare SHOW FUNCTION STATUS comando.

Eseguire quanto segue per elencare tutte le funzioni:

SHOW FUNCTION STATUS;

La sintassi è questa:

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

Quindi puoi usare un LIKE o WHERE clausola per restringere i risultati.

Esempio:

SHOW FUNCTION STATUS LIKE '%test%';

Esempio di risultato:

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

Possiamo usare il WHERE clausola per filtrare i risultati in base alle colonne. Ad esempio, possiamo filtrare i risultati in un determinato database:

SHOW FUNCTION STATUS WHERE db = 'sakila';

Esempio di risultato:

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

Il SHOW FUNCTION STATUS il comando funziona in modo molto simile a SHOW PROCEDURE STATUS comando, che restituisce un elenco di stored procedure.

Il information_schema.routines Tabella

Un altro modo per ottenere un elenco di funzioni in MySQL è interrogare information_schema.routines tabella.

Esempio:

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

Questa tabella memorizza anche le informazioni sulle procedure memorizzate. Nell'esempio sopra, li ho esclusi usando un WHERE clausola per restituire solo funzioni (cioè oggetti con un routine_type di FUNCTION ).

Per includere le stored procedure 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 restringerlo a un database specifico:

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

Esempio di risultato:

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