MySQL中显示存储过程定义的命令是什么,类似于Microsoft SQL Server中的
我知道
sp_helptext
?我知道
SHOW PROCEDURE STATUS
会显示可用存储过程的列表。但我需要查看单个存储过程的定义。sp_helptext
?SHOW PROCEDURE STATUS
会显示可用存储过程的列表。但我需要查看单个存储过程的定义。SHOW CREATE PROCEDURE <name>
返回先前使用 CREATE PROCEDURE
语句创建的已定义存储过程的文本。将 PROCEDURE
更换为 FUNCTION
,以获取已定义存储函数的文本。
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
的错误提示。 - Govind Singh你可以使用这个:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
mysql.proc
查询返回的是param_list
、returns
和body
的二进制数据...我无法读取它们...你是如何做到的? - Dmitry EfimenkoSELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA='$dbName' AND SPECIFIC_NAME=\"{$row['ROUTINE_NAME']}\" AND NOT PARAMETER_MODE IS NULL ORDER BY ORDINAL_POSITION;
- Peter BrandSHOW CREATE PROCEDURE proc_name;
返回proc_name
的定义。
如果想知道可以运行的过程列表,请运行以下命令 -
show procedure status;
这将给你一个存储过程及其定义者的列表,
然后你可以运行 show create procedure <procedurename>;
mysql> SELECT body FROM mysql.proc
WHERE db = 'yourdb' AND name = 'procedurename' ;
mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
something like:
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'
如果您想概览所有存储过程,或者遇到仅显示存储过程头部的问题,并且需要快速而简单的解决方案,则可以采用另一种快速而不太正式的方法:
mysqldump --user=<user> -p --no-data --routines <database>
它会导出表的描述,但不包括数据。非常适用于查找未知或被遗忘的模式... ;)
CREATE PROCEDURE
语句时,你必须选择一个数据库,否则会出现错误。SHOW CREATE PROCEDURE <procudure_name>;
或者:
SHOW CREATE PROCEDURE <procudure_name>\G
太好了,试试看:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";