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.
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.
Sie können dies verwenden:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
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.
SHOW CREATE PROCEDURE proc_name;
gibt die Definition von proc_name
zurück
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'
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 ...;)
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' ;