Di seguito sono riportate due opzioni per restituire un elenco di funzioni in MariaDB.
Il SHOW FUNCTION STATUS
Comando
Il modo più rapido per elencare tutte le funzioni è utilizzare SHOW FUNCTION STATUS
comando.
Basta 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 '%customer%';
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-13 07:26:47 | 2021-11-13 07:26:47 | DEFINER | | utf8mb4 | utf8mb4_general_ci | utf8mb4_general_ci | | sakila | inventory_held_by_customer | FUNCTION | [email protected] | 2021-11-13 07:26:47 | 2021-11-13 07:26:47 | DEFINER | | utf8mb4 | utf8mb4_general_ci | utf8mb4_general_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 = 'music';
Esempio di risultato:
+-------+------+----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation | +-------+------+----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | music | test | FUNCTION | [email protected] | 2021-11-27 09:46:25 | 2021-11-27 09:46:25 | DEFINER | | utf8 | utf8_general_ci | utf8mb4_general_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 MariaDB è 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;
Esempio di risultato:
+----------+----------------------------+ | Database | routine_name | +----------+----------------------------+ | music | test | | sakila | get_customer_balance | | sakila | inventory_held_by_customer | | sakila | inventory_in_stock | +----------+----------------------------+
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 = 'sakila'
ORDER BY
routine_name ASC;
Risultato:
+----------+----------------------------+--------------+ | Database | routine_name | routine_type | +----------+----------------------------+--------------+ | sakila | film_in_stock | PROCEDURE | | sakila | film_not_in_stock | PROCEDURE | | sakila | get_customer_balance | FUNCTION | | sakila | inventory_held_by_customer | FUNCTION | | sakila | inventory_in_stock | FUNCTION | | sakila | rewards_report | PROCEDURE | +----------+----------------------------+--------------+