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