¿Cuál es el comando MySQL para ver la definición de un procedimiento o función almacenada, similar a sp_helptext
Microsoft SQL Server?
Sé que SHOW PROCEDURE STATUS
mostrará la lista de los procedimientos disponibles. Necesito ver la definición de un solo procedimiento.
mysql
stored-procedures
stored-functions
MV de Srinivas
fuente
fuente
Respuestas:
SHOW CREATE PROCEDURE <name>
Devuelve el texto de un procedimiento almacenado definido previamente que se creó utilizando la
CREATE PROCEDURE
declaración. CambiarPROCEDURE
porFUNCTION
una función almacenada.fuente
#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
Puedes usar esto:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
fuente
mysql.proc
devuelve gotas paraparam_list
,returns
ybody
... estoy incapaz de leerlos ... ¿Cómo lo hiciste?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;
devuelve la definición de
proc_name
fuente
Si desea conocer la lista de procedimientos, puede ejecutar el siguiente comando:
show procedure status;
Le dará la lista de procedimientos y sus definidores. Luego puede ejecutar el
show create procedure <procedurename>;
fuente
Puede usar la tabla proc en la base de datos mysql :
mysql> SELECT body FROM mysql.proc WHERE db = 'yourdb' AND name = 'procedurename' ;
Tenga en cuenta que debe tener una concesión para seleccionar mysql.proc :
mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ;
fuente
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'
fuente
Una solución alternativa rápida y pirateada si desea obtener una descripción general de todos los productos que hay, o si se encuentra con el problema de obtener solo el encabezado del procedimiento que muestra SHOW CREATE PROCEDURE:
mysqldump --user=<user> -p --no-data --routines <database>
También exportará las descripciones de la tabla, pero no los datos. Funciona bien para husmear esquemas desconocidos u olvidados ...;)
fuente
Perfecto, pruébalo:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
fuente