2009-05-29 15 views
11

Para una base de datos MySQL dada que utilizo y modifico ocasionalmente tuve que hacer algunos cambios recientemente en algunas tablas y procedimientos almacenados. Hay lugares en este DB donde los procedimientos hacen llamadas a otros procedimientos. Encontré la tarea de buscar en todas partes que necesitaba modificar los parámetros de estos procedimientos modificados una molestia y recurrí a volcar el DB y hacer una búsqueda de texto en el archivo volcado para encontrar todas las declaraciones CALL.¿Encontrar todas las llamadas al Procedimiento almacenado de MySQL?

Me pregunto si hay una manera mejor y más fácil de hacer esto. Hice algunas búsquedas rápidas aquí en SO y también busqué en Google una solución, pero realmente no encontré una respuesta. Sospecho que hay una manera de crear una lista de las llamadas realizadas o alguna utilidad que lo haga simple, pero no he encontrado esta solución.

¿Alguna idea?

Respuesta

24

Bueno, finalmente tropezado con la siguiente solución:

La tabla INFORMATION_SCHEMA.ROUTINES tiene información que puede ser muy útil cuando se trata de rastrear llamadas de un SP a otro. He utilizado el siguiente:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE "%SomeProc%"; 

Y esto recuperé todos los procedimientos de la tienda que contenían SomeProc.

3

¡Guau, esto es increíble! Estoy usando esto para buscar texto en mi base de datos MySQL:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE "%search_string%"; 
3

He encontrado que esto es una lista más breve. Corregí todos mis procesos almacenados con '_sp', que me ayudó a buscarlos:

SELECT ROUTINE_NAME FROM information_schema.ROUTINES WHERE ROUTINE_NAME LIKE "%_sp"; 
Cuestiones relacionadas