2009-12-28 8 views

Respuesta

82
SHOW CREATE PROCEDURE <name> 

devuelve el texto de un procedimiento almacenado previamente definida que fue creado mediante la instrucción CREATE PROCEDURE. Cambie PROCEDURE por FUNCTION para una función almacenada.

+0

me sale '# 1064 - Tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de '' en la línea 1' –

+0

+1 Esto me ha ayudado tres veces. Uno de estos días recordaré el comando de memoria. –

+1

MOSTRAR CREAR FUNCIÓN hecho mi día. Gracias. – rikpg

8
SHOW CREATE PROCEDURE proc_name; 

devuelve la definición de proc_name

4

algo como:

DELIMITER // 

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

DELIMITER ; 

que:

SHOW CREATE PROCEDURE alluser 

da resultado:

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

Puede utilizar esta:

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

Desafortunadamente el ROUTINE_DEFINITION no incluye los parámetros IN/OUT del procedimiento almacenado ni los valores de retorno (mientras SHOW CREATE PROCEDURE lo hace). Si desea obtenerlos, puede consultar directamente contra mysql.proc, p. Ej. SELECCIONAR param_list, returns, body DESDE mysql.proc WHERE db = 'yourdb' AND type = 'PROCEDURE' y name = 'procedurename'; – GregW

+0

@GregW esa consulta de 'mysql.proc' devuelve blobs para' param_list', 'returns', y' body' ... No puedo leerlos ... ¿Cómo lo hiciste? – Dmitry

+0

nvm, respuesta encontrada [aquí] (http: // stackoverflow.com/questions/948174/how-do-i-convert-from-blob-to-text-in-mysql) – Dmitry

7

Si desea conocer la lista de procedimientos que puede ejecutar el siguiente comando -

show procedure status; 

que le dará la lista de procedimientos y sus definidores A continuación, puede ejecutar el show create procedure <procedurename>;

-2

perfecto, probarlo:

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

¡Bienvenido a SE! Por favor explique su respuesta, especialmente con respecto a lo que lo diferencia de los otros existentes. – anderas

0

Una solución rápida y hacky alternativa si desea obtener una visión general de todos los produres hay, o correr hacia el tema de obtener sólo el encabezado procedimiento mostrado por SHOW CREATE PROCEDIMIENTO:

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

Será exportar las descripciones de la tabla también, pero no datos. Funciona bien para husmear en esquemas desconocidos u olvidados ...;)

Cuestiones relacionadas