如何在 mysql 命令行(如 show tables;
或 show databases;
命令)中查看存储过程或存储函数的列表。
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
show procedure status
将向您展示存储过程。
show create procedure MY_PROC
将向您展示过程的定义。和
help show
将显示 show
命令的所有可用选项。
对于名称明智的查看过程
select name from mysql.proc
下面的代码用于列出所有程序,下面的代码给出与显示程序状态相同的结果
select * from mysql.proc
select db,name,type from mysql.proc where db<>'sys';
以获得更多信息,以及更少的内置系统 kruft。
更具体的方式:
SHOW PROCEDURE STATUS
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
Type
过滤器会很方便。
正如刚才提到的,
show procedure status;
确实会显示程序列表,但会在服务器范围内显示所有程序。
如果您只想查看单个数据库中的那些,请尝试以下操作:
SHOW PROCEDURE STATUS WHERE Db = 'databasename';
选择:
SELECT * FROM INFORMATION_SCHEMA.ROUTINES
我的偏好是:
列出函数和过程,让我知道哪些是哪个,给出过程的名称和类型,仅按当前数据库过滤结果,而不是当前定义者对结果进行排序
从这个线程中的其他答案拼接在一起,我最终得到
select
name, type
from
mysql.proc
where
db = database()
order by
type, name;
...最终您会得到如下所示的结果:
mysql> select name, type from mysql.proc where db = database() order by type, name;
+------------------------------+-----------+
| name | type |
+------------------------------+-----------+
| get_oldest_to_scan | FUNCTION |
| get_language_prevalence | PROCEDURE |
| get_top_repos_by_user | PROCEDURE |
| get_user_language_prevalence | PROCEDURE |
+------------------------------+-----------+
4 rows in set (0.30 sec)
显示所有存储过程:
SHOW PROCEDURE STATUS;
显示所有功能:
SHOW FUNCTION STATUS;
显示指定过程的定义:
SHOW CREATE PROCEDURE [PROC_NAME];
显示给定数据库的所有过程:
SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
用这个:
SHOW PROCEDURE STATUS;
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Praveenkumar_V 帖子的变体:
SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'PROCEDURE';
SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'FUNCTION';
..这是因为我需要在做一些家务后节省时间:
SELECT CONCAT(
"GRANT EXECUTE ON PROCEDURE `"
,`name`
,"` TO username@'%'; -- "
,`comment`
)
FROM mysql.proc
WHERE db = 'dbname'
AND `type` = 'PROCEDURE';
SELECT CONCAT(
"GRANT EXECUTE ON FUNCTION `"
,`name`
,"` TO username@'%'; -- "
,`comment`
)
FROM mysql.proc
WHERE db = 'dbname'
AND `type` = 'FUNCTION';
只显示你的:
SELECT
db, type, specific_name, param_list, returns
FROM
mysql.proc
WHERE
definer LIKE
CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
如果要列出当前选定数据库的存储过程,
SHOW PROCEDURE STATUS WHERE Db = DATABASE();
它将根据当前选定的数据库列出例程
更新列出数据库中的函数
select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="FUNCTION";
列出数据库中的例程/存储过程,
select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="PROCEDURE";
列出数据库中的表,
select * from information_schema.TABLES WHERE TABLE_TYPE="BASE TABLE" AND TABLE_SCHEMA="YOUR DATABASE NAME";
列出数据库中的视图,
方法一:
select * from information_schema.TABLES WHERE TABLE_TYPE="VIEW" AND TABLE_SCHEMA="YOUR DATABASE NAME";
方法二:
select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";
从 MySQL 8.0 开始,mysql.procs
表已被删除。从此处的答案中运行任何使用此表的命令都会产生一个错误,上面写着(非常合乎逻辑):
Table 'mysql.proc' doesn't exist
相反,要检索仅包含过程/函数名称的列表,请使用:
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='<your_db_name>';
就我而言,我对其进行了编辑以仅显示程序而不显示功能:
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='<your_db_name>' AND routine_type='PROCEDURE';
我最喜欢的当前数据库程序列表的渲染:名称、参数列表、注释
SELECT specific_name AS name, param_list AS params, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'PROCEDURE';
为函数添加返回:
SELECT specific_name AS name, param_list AS params, `returns`, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'FUNCTION';
show procedure status;
使用此命令,您可以查看数据库中的所有过程
列出所有数据库的用户过程和函数:
SELECT
`ROUTINE_SCHEMA` AS `database`
,`ROUTINE_TYPE` AS `type`
,`SPECIFIC_NAME` AS `name`
,`DTD_IDENTIFIER` AS `data_type`
FROM
`INFORMATION_SCHEMA`.`ROUTINES`
WHERE
`definer` LIKE
CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'))
ORDER BY
`database`
,`type`
,`name`
;
列出正在使用的数据库的用户程序和函数:
SELECT
`ROUTINE_SCHEMA` AS `database`
,`ROUTINE_TYPE` AS `type`
,`SPECIFIC_NAME` AS `name`
,`DTD_IDENTIFIER` AS `data_type`
FROM
`INFORMATION_SCHEMA`.`ROUTINES`
WHERE
`definer` LIKE
CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'))
AND
`ROUTINE_SCHEMA` = DATABASE()
ORDER BY
`type`
,`name`
;
对所有过程使用以下查询:
select * from sysobjects
where type='p'
order by crdate desc
object_name(@@procid)
,在 MySql 中是这样的吗?EXECUTE
的权限,否则,这将显示空列表。