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


Answers:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

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

1
如果用户具有EXECUTE或特权,则将显示空白列表。
mjb

211
show procedure status

将向您显示存储过程。

show create procedure MY_PROC

将向您显示过程的定义。和

help show

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


1
正如Codler指出的那样,帮助显示无法正常工作,因为帮助是mysql命令行指令。要获取有关SHOW命令的详细信息,请直接到MySQL文档页面在:dev.mysql.com/doc/refman/5.1/en/show.html
IvanD

2
好吧,我不确定你为什么这么说,帮助展示在centos 6.3上使用MySQL 5.0.95对我来说效果很好
h4unt3r

如果您使用mysqls自己的命令行客户端,它会起作用。我没有,所以我更喜欢在线参考。
Ledhund

这是最好的答案
Kolob Canyon

87

用于以明智的方式查看程序

select name from mysql.proc 

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

select * from mysql.proc 

4
这是一个比其他演示文稿更简洁的演示文稿,尤其是在较小的终端中。谢谢。
user1527227 2014年

我将此答案演变select db,name,type from mysql.proc where db<>'sys';为更多的信息,并减少了内置的系统kruft。
pbnelson

47

更具体的方法:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'

4
它也可以不使用AND Type ='PROCEDURE'而工作,
normalUser 2015年

33

正如刚才提到的,

show procedure status;

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

如果您只想查看单个数据库中的数据库,请尝试以下操作:

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

同样,在Db ='databasename'中显示功能状态;给你的功能。
David A. Gray


21

我的偏好是:

  1. 列出功能和过程,
  2. 让我知道哪个
  3. 给出过程的名称和类型,仅此而已
  4. 按当前数据库而不是当前定义器过滤结果
  5. 排序结果

从这个线程中的其他答案中缝合在一起,我最终得到了

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)

评论也很有帮助。
支石墓


11

显示所有存储过程:

SHOW PROCEDURE STATUS;

显示所有功能:

SHOW FUNCTION STATUS;

显示指定过程的定义:

SHOW CREATE PROCEDURE [PROC_NAME];

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

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

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

..这是因为在整理后我需要节省时间:

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

8

要只显示您的:

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

3
通常将SQL关键字大写,而将列名,表名等用小写字母表示。
萨加尔2013年


5

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

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

列出数据库中的视图,

方法1:

select * from information_schema.TABLES WHERE TABLE_TYPE="VIEW" AND TABLE_SCHEMA="YOUR DATABASE NAME";

方法2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";

1
                           show procedure status;

使用此命令,您可以查看数据库中的所有过程


0

我最喜欢的当前数据库程序列表的渲染:名称,参数列表,注释

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

0

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

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

-2

对所有过程使用以下查询:

select * from sysobjects 
where type='p'
order by crdate desc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.