Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/04/2015, 11:31
matyu65
 
Fecha de Ingreso: abril-2015
Ubicación: MEDELLIN
Mensajes: 6
Antigüedad: 9 años
Puntos: 0
procedimiento almacenado mysql

buenos dias a todos
les traigo una consulta que he buscado la sulucion por varios dias y no he podido continuar.
utilizo XAMP

Servidor: 127.0.0.1 via TCP/IP
Tipo de servidor: MySQL
Versión del servidor: 5.6.20 - MySQL Community Server (GPL)
Versión del protocolo: 10
Usuario: root@localhost
Conjunto de caracteres del servidor: UTF-8 Unicode (utf8)


lo que pasa es que estoy actualmente realizando un proyecto para la u el cual lo estoy haciendo en php y mysql con procedimientos almacenados.

mi problema es que he realizado dos procedimientos almacenados para la administracion de usuarios y son los siguientes;

Código SQL:
Ver original
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `gestion_usuarios`(
  2. IN Usu_codigo INT,
  3. IN Usu_nombre1 VARCHAR(25),
  4. IN Usu_apellidos1 VARCHAR(25),
  5. IN Usu_celular1 VARCHAR(25),
  6. IN Usu_correo1 VARCHAR(25),
  7. IN Usu_telefono1 VARCHAR(25),
  8. IN Usu_direccion1 VARCHAR(25),
  9. IN Usu_nombre_usu VARCHAR(25),
  10. IN Usu_contrasena VARCHAR(25)
  11. )
  12. BEGIN
  13. /*insertar*/
  14. IF((Usu_codigo IS NULL)OR(Usu_codigo='')OR(Usu_codigo=0))THEN
  15. IF((Usu_nombre1<>'')AND(Usu_apellidos1<>''))THEN
  16. /*insertar*/
  17. INSERT INTO `cinemax`.`tbl_usuarios`(usu_nombre,usu_apellidos, usu_celular,usu_email,usu_telefono,usu_direccion,u su_nombre_usu,usu_contrasena)
  18. VALUES(Usu_nombre1,Usu_apellidos1,Usu_celular1,Usu _correo1,Usu_telefono1,Usu_direccion1,Usu_nombre_u su,Usu_contrasena);
  19. SELECT 'se guardo';
  20. END IF;
  21. END IF;
  22. /*eliminar*/
  23. IF((Usu_codigo<>'')OR(Usu_codigo<>NULL))AND((Usu_n ombre1='')AND(Usu_apellidos1='')AND(Usu_celular1=' ')AND(Usu_correo1='')AND(Usu_telefono1='')AND(Usu_ direccion1='')AND(Usu_nombre_usu='')AND(Usu_contra sena=''))THEN
  24. DELETE FROM `cinemax`.`tbl_usuarios` WHERE `usu_cod`=Usu_codigo;
  25. SELECT 'se borro';
  26. /*modificar*/
  27. elseif((Usu_codigo<>'')OR(Usu_codigo<>NULL)OR(Usu_ codigo<>0))THEN
  28. IF((Usu_nombre1<>'')AND(Usu_apellidos1<>'')AND(Usu _celular1<>'')AND(Usu_correo1<>'')AND(Usu_telefono 1<>'')AND(Usu_direccion1<>'')AND(Usu_nombre_usu<>' ')AND(Usu_contrasena<>''))THEN
  29. UPDATE `cinemax`.`tbl_usuarios` SET usu_nombre=Usu_nombre1, usu_apellidos=Usu_apellidos1, usu_celular=Usu_celular1, usu_email=Usu_correo1, usu_telefono=Usu_telefono1, usu_direccion=Usu_direccion1, usu_nombre_usu=Usu_nombre_usu, usu_contrasena=Usu_contrasena WHERE usu_cod=Usu_codigo;
  30. SELECT 'se actualizo';
  31. END IF;
  32. END IF;
  33. END$$
  34.  
  35. DELIMITER ;

este procedimiento lo que hace es que inserta modifica o elimina usuarios de una tabla.... este es mi primer procedimiento y funciona perfecto.....

pero mi problema es que trate de crear otro procedimiento para lo empleados:

Código MySQL:
Ver original
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `gestion_empleados`(
  2. in Emp_codigo int,
  3. in Emp_cedula int,
  4. in Emp_nombre1 varchar(25),
  5. in Emp_apellidos1 varchar(25),
  6. in Emp_telefono1 varchar(25),
  7. in Emp_direccion1 varchar (25),
  8. in Emp_email1 varchar(25),
  9. in Emp_celular1 varchar (25),
  10. in Emp_descripcion1 varchar(25),
  11. in Emp_nombre_usu1 varchar(25),
  12. in Emp_contrasena1 varchar (25)
  13. )
  14. if((Emp_codigo='')or(Emp_codigo=NULL)or(Emp_codigo =0))then
  15. if((Emp_cedula<>'')and(Emp_nombre1<>'')and(Emp_ape llidos1<>'')and(Emp_telefono1<>''))then
  16. INSERT INTO `cinemax`.`tbl_empleados` (`emp_cedula`, `emp_nombre`, `emp_apellidos`, `emp_telefono`, `emp_direccion`, `emp_email`, `emp_celular`, `emp_descripcion`, `emp_nombre_usu`, `emp_contrasena`)
  17. VALUES (Emp_cedula,Emp_nombre1,Emp_apellidos1,Emp_telefon o1,Emp_direccion1,Emp_email1,Emp_celular1,Emp_desc ripcion1,Emp_nombre_usu1,Emp_contrasena1);
  18. SELECT 'se guardo';
  19. /*eliminar*/
  20. if((Emp_codigo<>'')or(Emp_codigo<>NULL))and((Emp_c edula='')and(Emp_nombre1='')and(Emp_apellidos1='') and(Emp_telefono1='')and(Emp_direccion1='')and(Emp _email1='')and(Emp_celular1='')and(Emp_descripcion 1='')and(Emp_nombre_usu1='')and(Emp_contrasena1='' ))then
  21. DELETE FROM `cinemax`.`tbl_empleados` WHERE `emp_codigo`=Emp_codigo;
  22. SELECT 'se borro';
  23. /*modificar*/
  24. elseif((Emp_codigo<>'')or(Emp_codigo<>NULL)or(Emp_ codigo<>0))then
  25. if((Emp_cedula<>'')and(Emp_nombre1<>'')and(Emp_ape llidos1<>'')and(Emp_telefono1<>'')and(Emp_direccio n1<>'')and(Emp_email1<>'')and(Emp_celular1<>'')and (Emp_descripcion1<>'')and(Emp_nombre_usu1<>'')and( Emp_contrasena1<>''))then
  26. UPDATE `cinemax`.`tbl_empleados` SET `emp_cedula`=Emp_cedula, `emp_nombre`=Emp_nombre1, `emp_apellidos`=Emp_apellidos1, `emp_telefono`=Emp_telefono1, `emp_direccion`=Emp_direccion1, `emp_email`=Emp_email1, `emp_celular`=Emp_celular1, `emp_descripcion`=Emp_descripcion1, `emp_nombre_usu`=Emp_nombre_usu1, `emp_contrasena`=Emp_contrasena1 WHERE `emp_codigo`=Emp_codigo;
  27. select'se actualizo';


el cual deberia de hacer la misma funcion que el otro procedimiento que es insertar modificar y eliminar los empleados de una tabla.... el error puntual es que el procedimiento de empleados inserta bien a la tabla pero cuando trato de eliminar o modificar un empleado se elimina o se modifica toda la tabla es decir
que la sentencia DELETE FROM `cinemax`.`tbl_empleados` WHERE `emp_codigo`=Emp_codigo; el where no funciona y elimina tdo....

en el caso de modificar:
Código MySQL:
Ver original
  1. UPDATE `cinemax`.`tbl_empleados` SET `emp_cedula`=Emp_cedula,
  2. `emp_nombre`=Emp_nombre1, `emp_apellidos`=Emp_apellidos1, `emp_telefono`=Emp_telefono1,
  3. `emp_direccion`=Emp_direccion1, `emp_email`=Emp_email1, `emp_celular`=Emp_celular1,
  4. `emp_descripcion`=Emp_descripcion1, `emp_nombre_usu`=Emp_nombre_usu1,
  5. `emp_contrasena`=Emp_contrasena1 WHERE `emp_codigo`=Emp_codigo;

me modifica todos los usuarios y no entiendo el por que elimina y modifica todos lo usuarios si las dos sentencial llevan consigo la clausula WHERE...


para concluir quiero decir que he revisado los campos de las tablas y son identicos, es decir si el campo es entero el procedimiento lleva una variable entera

he tratado de eliminar el procedimiento varias veces y volverlo a crear pero pasa lo mismo
es mas e migrado la base de datos para otro equipo y tampoko funciona el procedimiento, lo uniko que funciona es el insertar empleado, por que me elimina toda la tabla y me modifica toda la tabla como si no tuviera un WHERE


espero me ayuden y muchas gracias

Última edición por gnzsoloyo; 15/04/2015 a las 12:05