2009-12-28 20 views

Odpowiedz

82
SHOW CREATE PROCEDURE <name> 

Powoduje zwrócenie tekstu wcześniej zdefiniowanej procedury przechowywanej utworzonej za pomocą instrukcji CREATE PROCEDURE. Zamień PROCEDURE dla FUNCTION dla zapisanej funkcji.

+0

Otrzymuję '# 1064 - Masz błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu '' at line 1' –

+0

+1 To pomogło mi trzy razy. Któregoś dnia zapamiętam polecenie na pamięć. –

+1

SHOW CREATE FUNCTION zrobiłem mój dzień. dzięki. – rikpg

8
SHOW CREATE PROCEDURE proc_name; 

zwraca definicję proc_name

4

coś takiego:

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' 
32

Można to wykorzystać:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES 
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename"; 
+7

Niestety ROUTINE_DEFINITION nie zawiera parametrów IN/OUT procedury składowanej ani wartości zwracanych (podczas gdy SHOW CREATE PROCEDURE robi). Jeśli chcesz je uzyskać, możesz zapytać bezpośrednio o mysql.proc, np. SELECT param_list, zwraca, treść z mysql.proc WHERE db = 'yourdb' AND type = 'PROCEDURE' i name = 'procedururename'; – GregW

+0

@GregW to zapytanie z 'mysql.proc' zwraca blobs dla' param_list', 'zwraca' i' body' ... Nie mogę ich odczytać ... Jak to zrobiłeś? – Dmitry

+0

nvm, znaleziona odpowiedź [tutaj] (http: // stackoverflow.com/questions/948174/how-do-i-convert-from-blob-to-text-in-mysql) – Dmitry

7

Jeśli chcesz poznać listę procedur można uruchomić następujące polecenie -

show procedure status; 

To da ci listę procedur i ich wykrywaniem następnie można uruchomić show create procedure <procedurename>;

-2

Perfect, spróbuj go:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES 
    WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename"; 
+2

Witamy w SE! Proszę wyjaśnić swoją odpowiedź, szczególnie w odniesieniu do tego, co odróżnia ją od innych istniejących. – anderas

0

Alternatywną szybki i hacky rozwiązanie, jeśli chcesz otrzymać przegląd wszystkich produres istnieją, lub napotkasz emisji tylko coraz nagłówek procedury przedstawione przez SHOW CREATE procedury:

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

Będzie eksportuj również opisy tabel, ale brak danych. Działa dobrze do wąchania nieznanych lub zapomnianych schematów ...;)

Powiązane problemy