在MySQL中查看存储过程/函数定义

Sri*_*.V. 69 mysql stored-procedures stored-functions

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

我知道SHOW PROCEDURE STATUS会显示可用程序的列表.我需要看一个程序的定义.

aff*_*tee 105

SHOW CREATE PROCEDURE <name>
Run Code Online (Sandbox Code Playgroud)

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

  • 除非编译了Mysql,否则这将不起作用--with-debug.因此它不适用于AWS RDS实例.试试show create procedure'xxxx'; 如下@valli (3认同)

Hai*_*vgi 37

你可以用这个:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,ROUTINE_DEFINITION不包括存储过程的IN/OUT参数,也不包括返回值(虽然SHOW CREATE PROCEDURE有).如果你想得到那些,你可以直接查询mysql.proc,例如SELECT param_list,returns,body FROM mysql.proc WHERE db ='yourdb'AND type ='PROCEDURE'和name ='procedurename'; (8认同)
  • 请注意,如果运行查询的用户不是 DEFINER 并且安全设置为 DEFINER,则 ROUTINE_DEFINITION 将为空。如果将安全设置为 INVOKER,则不会有问题。您还可以从`SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA='$dbName' AND SPECIFIC_NAME=\"{$row['ROUTINE_NAME']}\" AND NOT PARAMETER_MODE IS NULL ORDER BY ORDINAL_POSITION;`中获取参数 (2认同)

小智 9

SHOW CREATE PROCEDURE proc_name;
Run Code Online (Sandbox Code Playgroud)

返回的定义 proc_name


小智 9

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

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

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


Omi*_*eri 7

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

mysql> SELECT body FROM mysql.proc
WHERE db = 'yourdb' AND name = 'procedurename' ;
Run Code Online (Sandbox Code Playgroud)

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

mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这不适用于 MySQL 8.0 版本,请参阅 [bugs.mysql.com/bug.php?id=93814](https://bugs.mysql.com/bug.php?id=93814) (2认同)

Mic*_*hel 5

就像是:

DELIMITER //

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

DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

比:

SHOW CREATE PROCEDURE alluser
Run Code Online (Sandbox Code Playgroud)

给出结果:

'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`()
BEGIN
   SELECT *
   FROM users;
END'
Run Code Online (Sandbox Code Playgroud)


ISp*_*kes 5

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

mysqldump --user=<user> -p --no-data --routines <database>
Run Code Online (Sandbox Code Playgroud)

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