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


当前回答

SHOW PROCEDURE STATUS;
SHOW FUNCTION 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';

从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 name from mysql.proc 

下面的代码用于列出所有过程,下面的代码给出与显示过程状态相同的结果

select * from mysql.proc 

列出所有数据库的用户过程和功能:

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`
;