问题
What is the MySQL command to view the definition of a stored procedure or function, similar to sp_helptext
in Microsoft SQL Server?
I know that SHOW PROCEDURE STATUS
will display the list of the procedures available. I need to see a single procedure's definition.
回答1:
SHOW CREATE PROCEDURE <name>
Returns the text of a previously defined stored procedure that was created using the CREATE PROCEDURE
statement. Swap PROCEDURE
for FUNCTION
for a stored function.
回答2:
You can use this:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
回答3:
SHOW CREATE PROCEDURE proc_name;
returns the definition of proc_name
回答4:
If you want to know the list of procedures you can run the following command -
show procedure status;
It will give you the list of procedures and their definers
Then you can run the show create procedure <procedurename>;
回答5:
something like:
DELIMITER //
CREATE PROCEDURE alluser()
BEGIN
SELECT *
FROM users;
END //
DELIMITER ;
than:
SHOW CREATE PROCEDURE alluser
gives result:
'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`()
BEGIN
SELECT *
FROM users;
END'
回答6:
An alternative quick and hacky solution if you want to get an overview of all the produres there are, or run into the issue of only getting the procedure header shown by SHOW CREATE PROCEDURE:
mysqldump --user=<user> -p --no-data --routines <database>
It will export the table descriptions as well, but no data. Works well for sniffing around unknown or forgotten schemas... ;)
回答7:
You can use table proc in database mysql:
mysql> SELECT body FROM mysql.proc
WHERE db = 'yourdb' AND name = 'procedurename' ;
Note that you must have a grant for select to mysql.proc:
mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
回答8:
Perfect, try it:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
来源:https://stackoverflow.com/questions/1968773/view-stored-procedure-function-definition-in-mysql