Jakie polecenie MySQL umożliwia wyświetlenie definicji procedury składowanej lub funkcji, podobnie jak sp_helptext
w programie Microsoft SQL Server?
Wiem, że SHOW PROCEDURE STATUS
wyświetli się lista dostępnych procedur. Muszę zobaczyć definicję pojedynczej procedury.
mysql
stored-procedures
stored-functions
Srinivas MV
źródło
źródło
Odpowiedzi:
SHOW CREATE PROCEDURE <name>
Zwraca tekst wcześniej zdefiniowanej procedury składowanej, która została utworzona przy użyciu
CREATE PROCEDURE
instrukcji. ZamieńPROCEDURE
naFUNCTION
zapisaną funkcję.źródło
#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
Możesz użyć tego:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
źródło
mysql.proc
zwraca obiekty blob dlaparam_list
,returns
ibody
... Nie mogę ich odczytać ... Jak to zrobiłeś?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;
SHOW CREATE PROCEDURE proc_name;
zwraca definicję
proc_name
źródło
Jeśli chcesz poznać listę procedur, możesz uruchomić następujące polecenie -
show procedure status;
Wyświetli listę procedur i ich definicji. Następnie możesz uruchomić plik
show create procedure <procedurename>;
źródło
Możesz użyć table proc w bazie danych mysql :
mysql> SELECT body FROM mysql.proc WHERE db = 'yourdb' AND name = 'procedurename' ;
Pamiętaj, że musisz mieć pozwolenie na wybór dla mysql.proc :
mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
źródło
coś jak:
DELIMITER // CREATE PROCEDURE alluser() BEGIN SELECT * FROM users; END // DELIMITER ;
niż:
SHOW CREATE PROCEDURE alluser
daje wynik:
'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`() BEGIN SELECT * FROM users; END'
źródło
Alternatywne szybkie i hakerskie rozwiązanie, jeśli chcesz uzyskać przegląd wszystkich dostępnych produktów lub napotkać problem z pobieraniem tylko nagłówka procedury pokazanego przez POKAŻ PROCEDURĘ TWORZENIA:
mysqldump --user=<user> -p --no-data --routines <database>
Wyeksportuje również opisy tabel, ale bez danych. Działa dobrze przy węszeniu nieznanych lub zapomnianych schematów ...;)
źródło
Idealnie, spróbuj:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
źródło