W MariaDB możemy użyć SHOW PROCEDURE STATUS
polecenie, aby zwrócić listę procedur składowanych.
Możemy również zapytać o information_schema.routines
tabeli, aby zrobić to samo.
SHOW PROCEDURE STATUS
Polecenie
Najłatwiejszym sposobem wyświetlenia listy wszystkich procedur składowanych jest użycie SHOW PROCEDURE STATUS
polecenie.
Po prostu uruchom następujące polecenie, aby wyświetlić wszystkie procedury składowane:
SHOW PROCEDURE STATUS;
Składnia wygląda tak:
SHOW PROCEDURE STATUS
[LIKE 'pattern' | WHERE expr]
Możesz więc użyć LIKE
klauzula lub WHERE
klauzula, aby zawęzić wyniki.
Przykład:
SHOW PROCEDURE STATUS LIKE 'film%';
Wynik:
+--------+-------------------+-----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | Db | Name | Type | Definer | Modified | Created | Security_type | Comment | character_set_client | collation_connection | Database Collation | +--------+-------------------+-----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | sakila | film_in_stock | PROCEDURE | [email protected] | 2021-11-13 07:26:47 | 2021-11-13 07:26:47 | DEFINER | | utf8mb4 | utf8mb4_general_ci | utf8mb4_general_ci | | sakila | film_not_in_stock | PROCEDURE | [email protected] | 2021-11-13 07:26:47 | 2021-11-13 07:26:47 | DEFINER | | utf8mb4 | utf8mb4_general_ci | utf8mb4_general_ci | +--------+-------------------+-----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
information_schema.routines
Tabela
Innym sposobem uzyskania listy procedur składowanych jest zapytanie o information_schema.routines
tabela.
Przykład:
SELECT
routine_schema as "Database",
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
ORDER BY
routine_schema ASC,
routine_name ASC;
Wynik:
+----------+--------------------+ | Database | routine_name | +----------+--------------------+ | mysql | AddGeometryColumn | | mysql | DropGeometryColumn | | pethouse | spGetAllPets | | pethouse | spGetPetById | | sakila | film_in_stock | | sakila | film_not_in_stock | | sakila | rewards_report | +----------+--------------------+
Ta tabela przechowuje również informacje o przechowywanych funkcjach. W powyższym przykładzie wykluczyłem je za pomocą WHERE
klauzula zwracająca tylko procedury składowane (tj. obiekty z routine_type
z PROCEDURE
).
Aby uwzględnić zapisane funkcje, możemy usunąć WHERE
klauzula:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
ORDER BY
routine_schema ASC,
routine_name ASC;
Wynik:
+----------+----------------------------+--------------+ | Database | routine_name | routine_type | +----------+----------------------------+--------------+ | mysql | AddGeometryColumn | PROCEDURE | | mysql | DropGeometryColumn | PROCEDURE | | pethouse | spGetAllPets | PROCEDURE | | pethouse | spGetPetById | PROCEDURE | | 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 | +----------+----------------------------+--------------+
W tym przypadku dodałem również routine_type
kolumna, abyśmy mogli rozróżnić procedury i funkcje.
Możemy również wykluczyć niektóre bazy danych z wyniku, jeśli chcemy:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema NOT IN ('sys', 'information_schema', 'mysql', 'performance_schema')
ORDER BY
routine_schema ASC,
routine_name ASC;
Wynik:
+----------+----------------------------+--------------+ | Database | routine_name | routine_type | +----------+----------------------------+--------------+ | pethouse | spGetAllPets | PROCEDURE | | pethouse | spGetPetById | PROCEDURE | | 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 | +----------+----------------------------+--------------+
Lub możemy zawęzić go do danej bazy danych:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema = 'pethouse'
ORDER BY
routine_name ASC;
Wynik:
+----------+--------------+--------------+ | Database | routine_name | routine_type | +----------+--------------+--------------+ | pethouse | spGetAllPets | PROCEDURE | | pethouse | spGetPetById | PROCEDURE | +----------+--------------+--------------+