Mysql
 sql >> Base de données >  >> RDS >> Mysql

2 façons de lister toutes les fonctions dans MySQL

Vous trouverez ci-dessous deux options que nous pouvons utiliser pour renvoyer une liste de fonctions dans MySQL.

Le SHOW FUNCTION STATUS Commande

Le moyen le plus rapide de lister toutes les fonctions est d'utiliser le SHOW FUNCTION STATUS commande.

Exécutez ce qui suit pour répertorier toutes les fonctions :

SHOW FUNCTION STATUS;

La syntaxe ressemble à ceci :

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

Vous pouvez donc utiliser un LIKE ou WHERE clause pour affiner les résultats.

Exemple :

SHOW FUNCTION STATUS LIKE '%test%';

Exemple de résultat :

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

Nous pouvons utiliser le WHERE clause pour filtrer les résultats par les colonnes. Par exemple, nous pouvons filtrer les résultats vers une base de données donnée :

SHOW FUNCTION STATUS WHERE db = 'sakila';

Exemple de résultat :

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

Le SHOW FUNCTION STATUS La commande fonctionne très bien comme la commande SHOW PROCEDURE STATUS commande, qui renvoie une liste de procédures stockées.

Les information_schema.routines Tableau

Une autre façon d'obtenir une liste de fonctions dans MySQL est d'interroger le information_schema.routines tableau.

Exemple :

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

Cette table stocke également des informations sur les procédures stockées. Dans l'exemple ci-dessus, j'ai exclu ceux en utilisant un WHERE clause pour renvoyer uniquement les fonctions (c'est-à-dire les objets avec un routine_type de FUNCTION ).

Pour inclure les procédures stockées, nous pouvons supprimer le WHERE clause :

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

Dans ce cas, j'ai également ajouté le routine_type colonne afin que nous puissions faire la distinction entre les procédures et les fonctions.

Nous pouvons également le réduire à une base de données spécifique :

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

Exemple de résultat :

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