Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中查看存储过程/函数定义_Mysql_Stored Procedures_Stored Functions - Fatal编程技术网

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

在MySQL中查看存储过程/函数定义,mysql,stored-procedures,stored-functions,Mysql,Stored Procedures,Stored Functions,与Microsoft SQL Server中的sp_helptext类似,查看存储过程或函数定义的MySQL命令是什么 我知道“显示程序状态”将显示可用程序的列表。我需要看一个程序的定义 SHOW CREATE PROCEDURE <name> 返回使用CREATE procedure语句创建的先前定义的存储过程的文本。存储函数的函数交换过程 SHOW CREATE PROCEDURE proc_name; 返回进程名称的定义,类似于: DELIMITER // CREATE

与Microsoft SQL Server中的sp_helptext类似,查看存储过程或函数定义的MySQL命令是什么

我知道“显示程序状态”将显示可用程序的列表。我需要看一个程序的定义

SHOW CREATE PROCEDURE <name>
返回使用CREATE procedure语句创建的先前定义的存储过程的文本。存储函数的函数交换过程

SHOW CREATE PROCEDURE proc_name;
返回进程名称的定义,类似于:

DELIMITER //

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

DELIMITER ;
比:

给出结果:

'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`()
BEGIN
   SELECT *
   FROM users;
END'
您可以使用以下选项:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";

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

show procedure status;
它将为您提供程序及其定义的列表 然后可以运行show create过程

完美,试试看:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";

如果您想获得所有产品的概览,或遇到仅获取SHOW CREATE procedure所示的过程标题的问题,则可以使用另一种快速而有技巧的解决方案:

mysqldump --user=<user> -p --no-data --routines <database>
它还将导出表描述,但不导出数据。适用于嗅探未知或遗忘的模式

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

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


不幸的是,例程_定义不包括存储过程的输入/输出参数,也不包括返回值,而SHOW CREATE过程则不包括。如果你想得到这些,你可以直接查询mysql.proc,例如选择param_list,returns,body FROM mysql.proc WHERE db='yourdb',type='PROCEDURE'和name='procedurename'@GregW,来自mysql.proc的查询返回参数列表、返回和主体的blob。。。我看不懂它们。。。你是怎么做到的?nvm,找到答案请注意,如果运行查询的用户不是定义者并且安全设置为定义者,则例程定义将为空。如果将安全性设置为INVOKER,则不会出现问题。您还可以从SELECT*from information_schema.parameters获取参数,其中SPECIFIC_schema='$dbName'和SPECIFIC_NAME=\{$row['ROUTINE_NAME']}\且NOT PARAMETER_MODE按顺序为空;更正,即使安全设置为INVOKER,如果运行查询的用户与定义者不同,则定义将为null;检查与MySQL服务器版本对应的手册,了解第1+1行附近使用的正确语法。这已经帮助我三次了。总有一天我会记住这个命令,除非Mysql是用debug编译的,否则这个命令不会起作用。因此,它不适用于AWS RDS实例。尝试显示创建过程“xxxx”;作为@valli belowWelcome SE!请解释您的答案,特别是它与其他现有答案的区别。选择*FOM mysql.proc\G;这也没有显示程序的文本。对我来说很有用。我使用的是AWS/RDS无服务器。Proc文本显示“创建过程”列。请注意,这不适用于MySQL版本8.0,请参阅
mysqldump --user=<user> -p --no-data --routines <database>
mysql> SELECT body FROM mysql.proc
WHERE db = 'yourdb' AND name = 'procedurename' ;
mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;