存储过程/函数列表Mysql命令行

sys*_*ult 465 mysql command-line stored-procedures

如何在mysql命令行show tables;show databases;命令中查看存储过程或存储函数的列表.

fre*_*rik 729

SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法找到当前的存储过程名称?我相信它在SSMS中的`object_name(@@ procid)`在MySql中是这样的吗? (2认同)

小智 209

show procedure status
Run Code Online (Sandbox Code Playgroud)

将显示存储过程.

show create procedure MY_PROC
Run Code Online (Sandbox Code Playgroud)

将向您展示程序的定义.和

help show
Run Code Online (Sandbox Code Playgroud)

将显示该show命令的所有可用选项.

  • 好吧,我不确定你为什么这么说,帮助节目对我使用MySQL 5.0.95在centos 6.3上工作正常 (2认同)

Pra*_*r_V 85

以名义方式查看过程

select name from mysql.proc 
Run Code Online (Sandbox Code Playgroud)

下面用于列出所有过程的代码,下面的代码与show procedure status给出相同的结果

select * from mysql.proc 
Run Code Online (Sandbox Code Playgroud)

  • 这是一个比其他人更清晰的演示文稿,特别是如果你在一个较小的终端.谢谢. (4认同)

sas*_*man 44

更具体的方式:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
Run Code Online (Sandbox Code Playgroud)

  • 它也可以在不使用AND Type ='PROCEDURE'的情况下工作, (4认同)

Dra*_*rok 32

正如刚才提到的,

show procedure status;
Run Code Online (Sandbox Code Playgroud)

确实会显示一个程序列表,但在服务器范围内显示所有这些程序.

如果您只想查看单个数据库中的那些,请尝试以下方法:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
Run Code Online (Sandbox Code Playgroud)


mac*_*Jun 28

替代方案:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
Run Code Online (Sandbox Code Playgroud)


Joh*_*and 21

我的偏好是:

  1. 列出功能和程序,
  2. 让我知道哪些是,
  3. 给出程序的名称和类型,没有别的,
  4. 过滤当前数据库的结果,而不是当前的定义者
  5. 对结果进行排序

从这个帖子中的其他答案拼凑而成,我最终得到了

select 
  name, type 
from 
  mysql.proc 
where 
  db = database() 
order by 
  type, name;
Run Code Online (Sandbox Code Playgroud)

...最终会得到如下结果:

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)
Run Code Online (Sandbox Code Playgroud)


小智 15

用这个:

SHOW PROCEDURE STATUS;
Run Code Online (Sandbox Code Playgroud)


小智 10

显示所有存储过程:

SHOW PROCEDURE STATUS;
Run Code Online (Sandbox Code Playgroud)

显示所有功能:

SHOW FUNCTION STATUS;
Run Code Online (Sandbox Code Playgroud)

显示指定过程的定义:

SHOW CREATE PROCEDURE [PROC_NAME];
Run Code Online (Sandbox Code Playgroud)

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

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
Run Code Online (Sandbox Code Playgroud)


tra*_*hag 9

Praveenkumar_V帖子的变体:

SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'PROCEDURE';
SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'FUNCTION';
Run Code Online (Sandbox Code Playgroud)

..这是因为我需要在一些家务后节省时间:

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';
Run Code Online (Sandbox Code Playgroud)


Cha*_*eck 8

只显示你的:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
Run Code Online (Sandbox Code Playgroud)

  • 将SQL关键字放在所有大写字母中是常见的惯例,同时将列名,表名等放在小写字母中. (3认同)

Sun*_*mar 7

SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Run Code Online (Sandbox Code Playgroud)


Moh*_*med 5

如果要列出当前所选数据库的存储过程,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();
Run Code Online (Sandbox Code Playgroud)

它将基于当前选定的数据库列出例程

更新 以列出数据库中的功能

select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="FUNCTION";
Run Code Online (Sandbox Code Playgroud)

列出数据库中的例程/存储过程,

select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="PROCEDURE";
Run Code Online (Sandbox Code Playgroud)

列出数据库中的表,

select * from information_schema.TABLES WHERE TABLE_TYPE="BASE TABLE" AND TABLE_SCHEMA="YOUR DATABASE NAME";
Run Code Online (Sandbox Code Playgroud)

列出数据库中的视图,

方法1:

select * from information_schema.TABLES WHERE TABLE_TYPE="VIEW" AND TABLE_SCHEMA="YOUR DATABASE NAME";
Run Code Online (Sandbox Code Playgroud)

方法2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";
Run Code Online (Sandbox Code Playgroud)


Ali*_*nes 5

从 MySQL 8.0 开始,该mysql.procs表已被删除。运行此处使用此表的答案中的任何命令都会产生一个错误,内容为(非常合乎逻辑):

Table 'mysql.proc' doesn't exist
Run Code Online (Sandbox Code Playgroud)

相反,要检索仅包含过程/函数名称的列表,请使用:

SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='<your_db_name>';
Run Code Online (Sandbox Code Playgroud)

就我而言,我对其进行了编辑以仅显示过程而不显示功能:

SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='<your_db_name>' AND routine_type='PROCEDURE';
Run Code Online (Sandbox Code Playgroud)