91

什么是 MySQL 命令来查看存储过程或函数的定义,类似于sp_helptextMicrosoft SQL Server?

我知道这SHOW PROCEDURE STATUS将显示可用程序的列表。我需要查看单个过程的定义。

4

8 回答 8

141
SHOW CREATE PROCEDURE <name>

返回使用该CREATE PROCEDURE语句创建的先前定义的存储过程的文本。交换一个存储的函数PROCEDUREFUNCTION

于 2009-12-28T10:13:17.467 回答
42

你可以使用这个:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
于 2009-12-28T10:53:15.293 回答
13
SHOW CREATE PROCEDURE proc_name;

返回的定义proc_name

于 2009-12-28T10:18:04.057 回答
10

如果您想知道程序列表,可以运行以下命令 -

show procedure status;

它将为您提供程序列表及其定义器然后您可以运行show create procedure <procedurename>;

于 2012-06-26T19:00:13.390 回答
7

您可以在数据库mysql中使用表proc

mysql> SELECT body FROM mysql.proc
WHERE db = 'yourdb' AND name = 'procedurename' ;

请注意,您必须获得对mysql.proc的 select 授权:

mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
于 2018-05-15T07:55:14.750 回答
5

就像是:

DELIMITER //

CREATE PROCEDURE alluser()
BEGIN
   SELECT *
   FROM users;
END //

DELIMITER ;

比:

SHOW CREATE PROCEDURE alluser

给出结果:

'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`()
BEGIN
   SELECT *
   FROM users;
END'
于 2009-12-28T10:29:47.157 回答
5

如果您想了解所有产品的概述,或者遇到仅获取 SHOW CREATE PROCEDURE 显示的过程标头的问题,另一种快速而简单的解决方案:

mysqldump --user=<user> -p --no-data --routines <database>

它也会导出表描述,但没有数据。非常适合嗅探未知或被遗忘的模式... ;)

于 2017-04-05T10:01:24.493 回答
-3

完美,试试吧:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
于 2015-08-05T08:35:59.547 回答