Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/02/2012, 16:25
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Es posible hacer este IF?

Hola ferminako:

La sintaxis del IF que estás buscando es diferente a la que se utiliza en el Select.

http://dev.mysql.com/doc/refman/5.0/...onstructs.html

Hay varios detalles en lo que estás intentando hacer, creo que es conveniente que le des una revisada a la documentación de MySQL, pues la sintaxis no es tan semejante a la de SQL Server por ejemplo. Vayamos por partes:

1. No es recomendable que tus parámetros se llamen igual que tus campos.
2. Evita en lo posible el uso de palabras en inglés (PASSWORD)
3. En MySQL, para colocar el resultado de un SELECT en una variable utilizas INTO:

http://dev.mysql.com/doc/refman/5.0/...statement.html

Para el ejemplo voy a suponer que tienes una tabla más o menos así;

Código MySQL:
Ver original
  1. mysql> CREATE TABLE usuarios
  2.     -> login VARCHAR(45),
  3.     -> contrasenia VARCHAR(45),
  4.     -> nivel INT,
  5.     -> nombre VARCHAR(45),
  6.     -> apellidos VARCHAR(100),
  7.     -> PRIMARY KEY (id));
  8. Query OK, 0 rows affected (0.10 sec)
  9.  
  10. mysql> INSERT INTO usuarios VALUES (NULL, 'uno', 'uno', 1, 'Uno', 'Unico');
  11. Query OK, 1 row affected (0.03 sec)
  12.  
  13. mysql> SELECT * FROM usuarios;
  14. +----+-------+-------------+-------+--------+-----------+
  15. | id | login | contrasenia | nivel | nombre | apellidos |
  16. +----+-------+-------------+-------+--------+-----------+
  17. |  1 | uno   | uno         |     1 | Uno    | Unico     |
  18. +----+-------+-------------+-------+--------+-----------+
  19. 1 row in set (0.00 sec)

Ahora bien, el SP que intentas hacer quedaría más o menos así:

Código:
DELIMITER $$
DROP PROCEDURE IF EXISTS `Ins_Usuario`$$
CREATE PROCEDURE Ins_Usuario(OUT Res INT, 
IN in_login VARCHAR(45), 
IN in_contrasenia VARCHAR(45),
IN in_nivel INT, 
IN in_nombre VARCHAR(45), 
IN in_apellido VARCHAR(100)
)
BEGIN
DECLARE existe INT;
SET existe = 0;
SELECT COUNT(id) INTO existe FROM usuarios WHERE login = in_login;
IF (existe > 0) THEN
	SET res = 1;
ELSE
	INSERT INTO usuarios VALUES (NULL, in_login, in_contrasenia, in_nivel, in_nombre, in_apellido);
	SET res = 0;
END IF;
END$$
DELIMITER ;
para probarlo hacemos lo siguiente:

Código MySQL:
Ver original
  1. mysql> #insertamos un nuevo
  2. mysql> CALL Ins_Usuario(@res, 'dos', 'dos', 2, 'Dos', 'Segundo');
  3. Query OK, 1 row affected (0.06 sec)
  4.  
  5. mysql> #verificamos el resultado del procedimiento
  6. mysql> SELECT @res;
  7. +------+
  8. | @res |
  9. +------+
  10. |    0 |
  11. +------+
  12. 1 row in set (0.00 sec)
  13.  
  14. mysql> #verificamos el resultado en la tabla
  15. mysql> SELECT * FROM usuarios;
  16. +----+-------+-------------+-------+--------+-----------+
  17. | id | login | contrasenia | nivel | Nombre | apellidos |
  18. +----+-------+-------------+-------+--------+-----------+
  19. |  1 | uno   | uno         |     1 | Uno    | Unico     |
  20. |  2 | dos   | dos         |     2 | Dos    | Segundo   |
  21. +----+-------+-------------+-------+--------+-----------+
  22. 2 rows in set (0.00 sec)
  23.  
  24. mysql> #tratamos de insertar nuevamente el mismo registro
  25. mysql> CALL Ins_Usuario(@res, 'dos', 'dos', 2, 'Dos', 'Segundo');
  26. Query OK, 1 row affected (0.00 sec)
  27.  
  28. mysql> #verificamos el resultado del procedimiento
  29. mysql> SELECT @res;
  30. +------+
  31. | @res |
  32. +------+
  33. |    1 |
  34. +------+
  35. 1 row in set (0.00 sec)
  36.  
  37. mysql> #verificamos el resultado en la tabla
  38. mysql> SELECT * FROM usuarios;
  39. +----+-------+-------------+-------+--------+-----------+
  40. | id | login | contrasenia | nivel | Nombre | apellidos |
  41. +----+-------+-------------+-------+--------+-----------+
  42. |  1 | uno   | uno         |     1 | Uno    | Unico     |
  43. |  2 | dos   | dos         |     2 | Dos    | Segundo   |
  44. +----+-------+-------------+-------+--------+-----------+
  45. 2 rows in set (0.00 sec)

Saludos
Leo.