如何在mysql命令行中看到存储过程或存储函数的列表,如show tables;或显示数据库;命令。


当前回答

从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';

其他回答

显示所有存储过程:

SHOW PROCEDURE STATUS;

显示所有函数:

SHOW FUNCTION STATUS;

显示指定过程的定义:

SHOW CREATE PROCEDURE [PROC_NAME];

显示给定数据库的所有程序:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';

我的偏好是:

列出了函数和过程, 让我知道哪个是哪个, 只给出过程的名称和类型, 根据当前数据库而不是当前定义器筛选结果 对结果进行排序

把这篇文章中的其他答案拼接在一起,我最终得到了

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 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'

如上所述,

show procedure status;

确实会显示过程列表,但会显示服务器范围内的所有过程。

如果你想只看到一个数据库中的那些,试试这个:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

用这个:

SHOW PROCEDURE STATUS;