sql >> Databáze >  >> RDS >> MariaDB

Jak vypsat všechny uložené procedury v MariaDB

V MariaDB můžeme použít SHOW PROCEDURE STATUS příkaz k vrácení seznamu uložených procedur.

Můžeme se také zeptat na information_schema.routines stůl udělat totéž.

SHOW PROCEDURE STATUS Příkaz

Nejjednodušší způsob, jak vypsat všechny uložené procedury, je použít SHOW PROCEDURE STATUS příkaz.

Jednoduše spusťte následující, abyste vypsali všechny uložené procedury:

SHOW PROCEDURE STATUS;

Syntaxe vypadá takto:

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

Můžete tedy použít LIKE klauzule nebo WHERE klauzule pro zúžení výsledků.

Příklad:

SHOW PROCEDURE STATUS LIKE 'film%';

Výsledek:

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

Dalším způsobem, jak získat seznam uložených procedur, je dotaz na information_schema.routines tabulka.

Příklad:

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

Výsledek:

+----------+--------------------+
| Database | routine_name       |
+----------+--------------------+
| mysql    | AddGeometryColumn  |
| mysql    | DropGeometryColumn |
| pethouse | spGetAllPets       |
| pethouse | spGetPetById       |
| sakila   | film_in_stock      |
| sakila   | film_not_in_stock  |
| sakila   | rewards_report     |
+----------+--------------------+

Tato tabulka také obsahuje informace o uložených funkcích. Ve výše uvedeném příkladu jsem je vyloučil pomocí WHERE klauzule k vrácení pouze uložených procedur (tj. objektů s routine_type z PROCEDURE ).

Chcete-li zahrnout uložené funkce, můžeme odstranit WHERE klauzule:

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

Výsledek:

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

V tomto případě jsem také přidal routine_type abychom mohli rozlišovat mezi procedurami a funkcemi.

Můžeme také vyloučit určité databáze z výsledku, pokud chceme:

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;

Výsledek:

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

Nebo bychom to mohli zúžit na danou databázi:

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

Výsledek:

+----------+--------------+--------------+
| Database | routine_name | routine_type |
+----------+--------------+--------------+
| pethouse | spGetAllPets | PROCEDURE    |
| pethouse | spGetPetById | PROCEDURE    |
+----------+--------------+--------------+

  1. Kompilace zapisovatelného rozšíření mongo_fdw v binárním formátu instalace PostgreSQL.

  2. Datetime stejný nebo větší než dnes v MySQL

  3. Jak na serveru SQL Server pivotovat pro více sloupců

  4. Slide decky a vzorky z #SQLintersection