
Problema con procedimiento almacenado
Publicado por Jean-Jacques (3 intervenciones) el 13/03/2015 12:58:02
Saludos, comunidad.
Estoy empezando con programación, y concretamento en lenguaje MySQL. Mi intención es 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 llega a ejecutarse la tercera 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, que verifica 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 la tercera condicional, que comprueba si el host de la segunda cuenta está vacío para sustituírlo por %. ¿Alguien puede ayudarme a solvertar este problema?
Estoy empezando con programación, y concretamento en lenguaje MySQL. Mi intención es 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 llega a ejecutarse la tercera 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, que verifica 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 la tercera condicional, que comprueba si el host de la segunda cuenta está vacío para sustituírlo por %. ¿Alguien puede ayudarme a solvertar este problema?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* 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;
Valora esta pregunta


0