Trong MariaDB, chúng ta có thể sử dụng SHOW PROCEDURE STATUS
lệnh để trả về danh sách các thủ tục đã lưu trữ.
Chúng tôi cũng có thể truy vấn information_schema.routines
để làm điều tương tự.
SHOW PROCEDURE STATUS
Lệnh
Cách dễ nhất để liệt kê tất cả các thủ tục được lưu trữ là sử dụng SHOW PROCEDURE STATUS
lệnh.
Chỉ cần chạy như sau để liệt kê tất cả các thủ tục được lưu trữ:
SHOW PROCEDURE STATUS;
Cú pháp như sau:
SHOW PROCEDURE STATUS
[LIKE 'pattern' | WHERE expr]
Vì vậy, bạn có thể sử dụng LIKE
mệnh đề hoặc WHERE
mệnh đề thu hẹp kết quả.
Ví dụ:
SHOW PROCEDURE STATUS LIKE 'film%';
Kết quả:
+--------+-------------------+-----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | 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
Bảng
Một cách khác để lấy danh sách các thủ tục được lưu trữ là truy vấn information_schema.routines
bảng.
Ví dụ:
SELECT
routine_schema as "Database",
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
ORDER BY
routine_schema ASC,
routine_name ASC;
Kết quả:
+----------+--------------------+ | Database | routine_name | +----------+--------------------+ | mysql | AddGeometryColumn | | mysql | DropGeometryColumn | | pethouse | spGetAllPets | | pethouse | spGetPetById | | sakila | film_in_stock | | sakila | film_not_in_stock | | sakila | rewards_report | +----------+--------------------+
Bảng này cũng lưu trữ thông tin về các chức năng được lưu trữ. Trong ví dụ trên, tôi đã loại trừ những thứ đó bằng cách sử dụng WHERE
mệnh đề chỉ trả về các thủ tục được lưu trữ (tức là các đối tượng có routine_type
trong tổng số PROCEDURE
).
Để bao gồm các chức năng được lưu trữ, chúng tôi có thể xóa WHERE
mệnh đề:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
ORDER BY
routine_schema ASC,
routine_name ASC;
Kết quả:
+----------+----------------------------+--------------+ | 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 | +----------+----------------------------+--------------+
Trong trường hợp này, tôi cũng đã thêm routine_type
để chúng ta có thể phân biệt giữa các thủ tục và các hàm.
Chúng tôi cũng có thể loại trừ một số cơ sở dữ liệu nhất định khỏi kết quả nếu chúng tôi muốn:
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;
Kết quả:
+----------+----------------------------+--------------+ | 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 | +----------+----------------------------+--------------+
Hoặc chúng tôi có thể thu hẹp nó xuống một cơ sở dữ liệu nhất định:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema = 'pethouse'
ORDER BY
routine_name ASC;
Kết quả:
+----------+--------------+--------------+ | Database | routine_name | routine_type | +----------+--------------+--------------+ | pethouse | spGetAllPets | PROCEDURE | | pethouse | spGetPetById | PROCEDURE | +----------+--------------+--------------+