sql >> Database >  >> RDS >> MariaDB

Een lijst maken van alle opgeslagen procedures in MariaDB

In MariaDB kunnen we de SHOW PROCEDURE STATUS . gebruiken commando om een ​​lijst met opgeslagen procedures te retourneren.

We kunnen ook de information_schema.routines . opvragen tafel om hetzelfde te doen.

De SHOW PROCEDURE STATUS Commando

De eenvoudigste manier om alle opgeslagen procedures op een rij te zetten, is door de SHOW PROCEDURE STATUS te gebruiken. commando.

Voer gewoon het volgende uit om alle opgeslagen procedures op te sommen:

SHOW PROCEDURE STATUS;

De syntaxis gaat als volgt:

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

U kunt dus een LIKE . gebruiken clausule of WHERE clausule om de resultaten te verfijnen.

Voorbeeld:

SHOW PROCEDURE STATUS LIKE 'film%';

Resultaat:

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

De information_schema.routines Tabel

Een andere manier om een ​​lijst met opgeslagen procedures te krijgen, is door de information_schema.routines op te vragen. tafel.

Voorbeeld:

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

Resultaat:

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

Deze tabel bevat ook informatie over opgeslagen functies. In het bovenstaande voorbeeld heb ik die uitgesloten door een WHERE . te gebruiken clausule om alleen opgeslagen procedures te retourneren (d.w.z. objecten met een routine_type van PROCEDURE ).

Om opgeslagen functies op te nemen, kunnen we de WHERE . verwijderen clausule:

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

Resultaat:

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

In dit geval heb ik ook de routine_type . toegevoegd kolom zodat we onderscheid kunnen maken tussen de procedures en functies.

We kunnen ook bepaalde databases uitsluiten van het resultaat als we dat willen:

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;

Resultaat:

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

Of we kunnen het beperken tot een bepaalde database:

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

Resultaat:

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

  1. SQL Server:Isolatieniveau lekken over gepoolde verbindingen

  2. postgresql COUNT (DISTINCT ...) erg traag

  3. 2 manieren om alle opgeslagen procedures in MySQL op te sommen

  4. TSQL - Hoe gebruik ik GO in een BEGIN .. END-blok?