ChatGPT解决这个技术问题 Extra ChatGPT

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

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


M
Michael Schmidt
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

有没有办法找到当前的存储过程名称?我相信它在 SSMS 中是 object_name(@@procid) ,在 MySql 中是这样的吗?
如果用户有 EXECUTE 的权限,否则,这将显示空列表。
佚名
show procedure status

将向您展示存储过程。

show create procedure MY_PROC

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

help show

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


正如 Codler 指出的那样,帮助显示不起作用,因为帮助是 mysql 命令行指令。要获取有关 SHOW 命令的更多信息,请直接访问 MySQL 文档页面:dev.mysql.com/doc/refman/5.1/en/show.html
嗯,我不知道你为什么这么说,帮助展示对我来说在 centos 6.3 上使用 MySQL 5.0.95 效果很好
如果您使用 mysqls 自己的命令行客户端,它可以工作。我没有,所以我更喜欢在线参考。
这是最好的答案
P
Praveenkumar_V

对于名称明智的查看过程

select name from mysql.proc 

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

select * from mysql.proc 

这是一个比其他更清晰的演示文稿,特别是如果您在较小的终端中。谢谢。
我将此答案演变为 select db,name,type from mysql.proc where db<>'sys'; 以获得更多信息,以及更少的内置系统 kruft。
J
Justin Johnson

更具体的方式:

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

它也可以在不使用 AND Type = 'PROCEDURE' 的情况下工作,
如果您有不想看到的功能,Type 过滤器会很方便。
D
Drarok

正如刚才提到的,

show procedure status;

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

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

SHOW PROCEDURE STATUS WHERE Db = 'databasename';

同样,SHOW FUNCTION STATUS WHERE Db = 'databasename';为您提供功能。
m
macio.Jun

选择:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

J
John Haugeland

我的偏好是:

列出函数和过程,让我知道哪些是哪个,给出过程的名称和类型,仅按当前数据库过滤结果,而不是当前定义者对结果进行排序

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

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)

评论也很有帮助。
u
userlond

显示所有存储过程:

SHOW PROCEDURE STATUS;

显示所有功能:

SHOW FUNCTION STATUS;

显示指定过程的定义:

SHOW CREATE PROCEDURE [PROC_NAME];

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

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

C
Code Lღver

用这个:

SHOW PROCEDURE STATUS;

S
Sunil Kumar
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'

t
trapper_hag

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

f
fthiella

只显示你的:

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

常见的约定是将 SQL 关键字全部大写,而将列名、表名等小写。
J
Jafoy

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

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

A
Alistair Jones

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

感谢您提供 MySQL 8.0 版本。为我工作!
d
dolmen

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

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

K
Karan
                           show procedure status;

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


d
dolmen

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

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

L
Luthando Ntsekwa

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

select * from sysobjects 
where type='p'
order by crdate desc