Was ist der MySQL-Befehl, um die Definition einer gespeicherten Prozedur oder Funktion anzuzeigen, ähnlich wie sp_helptext
in Microsoft SQL Server?
Ich weiß, dass SHOW PROCEDURE STATUS
die Liste der verfügbaren Verfahren angezeigt wird. Ich muss die Definition einer einzelnen Prozedur sehen.
mysql
stored-procedures
stored-functions
Srinivas MV
quelle
quelle
Antworten:
SHOW CREATE PROCEDURE <name>
Gibt den Text einer zuvor definierten gespeicherten Prozedur zurück, die mit der
CREATE PROCEDURE
Anweisung erstellt wurde. Tauschen SiePROCEDURE
gegenFUNCTION
für eine gespeicherte Funktion.quelle
#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
Sie können dies verwenden:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
quelle
mysql.proc
gibt Blobs für zurückparam_list
,returns
undbody
... ich kann sie nicht lesen ... Wie haben Sie das gemacht?SELECT * FROM information_schema.PARAMETERS WHERE SPECIFIC_SCHEMA='$dbName' AND SPECIFIC_NAME=\"{$row['ROUTINE_NAME']}\" AND NOT PARAMETER_MODE IS NULL ORDER BY ORDINAL_POSITION;
Wenn Sie die Liste der Prozeduren kennen möchten, können Sie den folgenden Befehl ausführen:
show procedure status;
Es gibt Ihnen die Liste der Prozeduren und ihrer Definierer. Dann können Sie die ausführen
show create procedure <procedurename>;
quelle
SHOW CREATE PROCEDURE proc_name;
gibt die Definition von zurück
proc_name
quelle
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 einen Zuschuss für die Auswahl von mysql.proc benötigen :
mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
quelle
etwas wie:
DELIMITER // CREATE PROCEDURE alluser() BEGIN SELECT * FROM users; END // DELIMITER ;
als:
SHOW CREATE PROCEDURE alluser
gibt Ergebnis:
'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`() BEGIN SELECT * FROM users; END'
quelle
Eine alternative schnelle und hackige Lösung, wenn Sie sich einen Überblick über alle verfügbaren Produkte verschaffen möchten oder nur den von SHOW CREATE PROCEDURE angezeigten Prozedur-Header erhalten möchten:
mysqldump --user=<user> -p --no-data --routines <database>
Es werden auch die Tabellenbeschreibungen exportiert, jedoch keine Daten. Funktioniert gut zum Schnüffeln in unbekannten oder vergessenen Schemata ...;)
quelle
Perfekt, probieren Sie es aus:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
quelle