wake-up-neo.com

Anzeigen der Definition gespeicherter Prozeduren/Funktionen in MySQL

Wie lautet der MySQL-Befehl zum Anzeigen der Definition einer gespeicherten Prozedur oder Funktion, ähnlich wie sp_helptext in Microsoft SQL Server?

Ich weiß, dass SHOW PROCEDURE STATUS die Liste der verfügbaren Verfahren anzeigt. Ich muss die Definition eines einzelnen Verfahrens sehen.

61
Srinivas M.V.
SHOW CREATE PROCEDURE <name>

Gibt den Text einer zuvor definierten gespeicherten Prozedur zurück, die mit der CREATE PROCEDURE-Anweisung erstellt wurde. Tauschen Sie PROCEDURE gegen FUNCTION gegen eine gespeicherte Funktion.

95
afftee

Sie können dies verwenden:

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

Wenn Sie die Liste der Prozeduren kennen möchten, können Sie den folgenden Befehl ausführen:

show procedure status;

Sie erhalten dann eine Liste der Prozeduren und ihrer Definierer .__ Dann können Sie den show create procedure <procedurename>; ausführen.

8
SHOW CREATE PROCEDURE proc_name;

gibt die Definition von proc_name zurück

8
valli

so etwas wie:

DELIMITER //

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

DELIMITER ;

als:

SHOW CREATE PROCEDURE alluser

ergibt das Ergebnis:

'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`()
BEGIN
   SELECT *
   FROM users;
END'
5
Michel

Eine alternative, schnelle und harte Lösung, wenn Sie einen Überblick über alle vorhandenen Vorgänge erhalten möchten oder das Problem auftreten, nur den durch SHOW CREATE PROCEDURE angezeigten Prozedurkopf zu erhalten:

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

Es werden auch die Tabellenbeschreibungen exportiert, jedoch keine Daten. Funktioniert gut zum Schnüffeln unbekannter oder vergessener Schemata ...;)

1
ISparkes

Sie können die Tabelle proc in der Datenbank mysql verwenden:

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

Beachten Sie, dass Sie eine Berechtigung für select to mysql.proc haben müssen:

mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
0