Problema con Procedimiento Almacenado

Jean-Jacques Montreux
13 de Marzo del 2015
Estoy empezando con programación, y concretamento en MySQL. Estoy intentando construir un Procedimiento almacenado que me permita eliminar un par de usuario a la vez pasando cuatro parámetros (NombreUsuario1, EquipoHost1 y NombreUsuario2, EquipoHost2). Nada especialmente útil, simplemente es un ejercicio. El problema es que no me pilla la condicional que interpretaría el vacío del segundo Host como el comodín %, y me cuesta entender el fallo porque no he dado mucha programación todavía. La primera condición, la de verificar si los dos nombres están vacíos, funciona y muestra el mensaje correspondiente. La segunda condición, que verifica si el parámetro nombre del primer usuario está vacío y el segundo nombre tiene dato, también. Como digo, el problema está en el tercer condicional, el que comprueba si el host de la segunda cuenta está vacío. No me llega a ejecutar este condicional. ¿Alguien puede ayudarme a solvertar este problema?





/* Si el parámetro del nombre de usuario de las dos cuentas no contiene datos, es decir, no se proporcionaron ninguno de los dos nombres de usuario, el procedimiento no realizará ninguna acción, mostrará una advertencia y finalizará su ejecución. */

IF STRCMP(NombreUsuario1,'') = 0 AND STRCMP(NombreUsuario2,'') = 0 THEN
SELECT 'No se han introducido nombres para las cuentas de usuario. Introduce los nombres e inténtalo de nuevo.';
END IF;

/* Si el primer nombre de usuario no tiene dato, se tratará la segunda cuenta */
IF STRCMP(NombreUsuario1,'') = 0 AND STRCMP(NombreUsuario2,'') = 1 THEN
SELECT 'No se ha introducido nombre para la primera cuenta de usuario. Intentará eliminarse la segunda.';
SET @Sentencia=CONCAT('DROP USER "' ,NombreUsuario2,'"@"',EquipoHost2,'"');

PREPARE Sentencia FROM @Sentencia;
EXECUTE Sentencia;
DEALLOCATE PREPARE Sentencia;
SELECT 'El usuario "',NombreUsuario2 ,'" con host "', EquipoHost2,'" fue eliminado con éxito.';



/* Si el host de la segunda cuenta está vacío se interpretará como un % */
IF STRCMP(NombreUsuario1,'') = 0 AND STRCMP(NombreUsuario2,'') = 1 AND STRCMP(EquipoHost2,'') = 0 THEN
SELECT 'No se ha introducido nombre para la primera cuenta de usuario. Intentará eliminarse la segunda.';
SET @Sentencia=CONCAT('DROP USER "' ,NombreUsuario2,'"@"','"%"');

PREPARE Sentencia FROM @Sentencia;
EXECUTE Sentencia;
DEALLOCATE PREPARE Sentencia;
SELECT 'El usuario "',NombreUsuario2 ,'" con host "%" fue eliminado con éxito.';

END IF;


END IF;