Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/04/2015, 12:34
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: procedimiento almacenado mysql

Tu código tiene varios defectos de lógica, pero el mas grave es que estas validando en el WHERE un campo contra el propio campo, por lo que siempre dará TRUE y te borrará todo.
Es un erro muy común, porque debes entender que MySQL no puede saber que el nombre de una variable representa un objeto diferente al de un campo. Para MySQL estás indicando el nombre del campo, no una variable.
Lo que debes hacer es siempre poner los nomrbes de variables distintos a lso de los campos, bases o tablas, ya que el analisis semántido ce MySQ reconoce los objetos por jerarquía, y una columna se prioriza sobre una variable...
¿Se entiende?
Además de eso, estás haciendo consultas complicadas en los IF... THEN, y no suficientemente discriminante, con un uso incorrecto del operador "=" con NULL, donde en MySQL no puede aplciarse, porque NULL no es un dato sino un estado.
Ese comportamiento es diferente de Oracle, por ejemplo.

Esta sería una priemra sugerencia:
Código MySQL:
Ver original
  1. CREATE PROCEDURE `gestion_empleados`(
  2. in Emp_codigo1 int,
  3. in Emp_cedula1 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 (SELECT  COUNT(*)
  15.            FROM `cinemax`.`tbl_empleados`
  16.         WHERE   Emp_cedula = Emp_cedula1
  17.             AND Emp_nombre = Emp_nombre1
  18.             AND Emp_apellidos = Emp_apellidos1<>''
  19.             AND Emp_telefono = Emp_telefono1<>'') = 0 THEN
  20.            
  21.             INSERT INTO `cinemax`.`tbl_empleados`
  22.                 (`emp_cedula`,
  23.                 `emp_nombre`,
  24.                 `emp_apellidos`,
  25.                 `emp_telefono`,
  26.                 `emp_direccion`,
  27.                 `emp_email`,
  28.                 `emp_celular`,
  29.                 `emp_descripcion`,
  30.                 `emp_nombre_usu`,
  31.                 `emp_contrasena`)
  32.             VALUES (
  33.                 Emp_cedula1,
  34.                 Emp_nombre1,
  35.                 Emp_apellidos1,
  36.                 Emp_telefono1,
  37.                 Emp_direccion1,
  38.                 Emp_email1,
  39.                 Emp_celular1,
  40.                 Emp_descripcion1,
  41.                 Emp_nombre_usu1,
  42.                 Emp_contrasena1);
  43.             SELECT 'se guardo';
  44.         END if;
  45.     END IF;
  46.     /*eliminar*/
  47.     IF(Emp_codigo > 0 AND (SELECT COUNT(*) FROM `cinemax`.`tbl_empleados` WHERE `emp_codigo` = Emp_codigo1) = 1
  48.             AND Emp_c edula=''
  49.             AND Emp_nombre1=''
  50.             AND Emp_apellidos1=''
  51.             AND Emp_telefono1=''
  52.             AND Emp_direccion1=''
  53.             AND Emp_email1=''
  54.             AND Emp_celular1=''
  55.             AND Emp_descripcion 1=''
  56.             AND Emp_nombre_usu1=''
  57.             AND Emp_contrasena1='' ) THEN
  58.         DELETE FROM `cinemax`.`tbl_empleados` WHERE `emp_codigo` = Emp_codigo1;
  59.         SELECT 'se borro';
  60.     /*modificar*/
  61.     elseif(Emp_codigo > 0 AND (SELECT COUNT(*) FROM `cinemax`.`tbl_empleados` WHERE `emp_codigo` = Emp_codigo1) = 1
  62.             AND Emp_cedula1<>''
  63.             AND Emp_nombre1<>''
  64.             AND Emp_ape llidos1<>''
  65.             AND Emp_telefono1<>''
  66.             AND Emp_direccio n1<>''
  67.             AND Emp_email1<>''
  68.             AND Emp_celular1<>''
  69.             AND Emp_descripcion1<>''
  70.             AND Emp_nombre_usu1<>''
  71.             AND Emp_contrasena1<>'') THEN
  72.            
  73.             UPDATE `cinemax`.`tbl_empleados`
  74.             SET `emp_cedula`=Emp_cedula1,
  75.                 `emp_nombre`=Emp_nombre1,
  76.                 `emp_apellidos`=Emp_apellidos1,
  77.                 `emp_telefono`=Emp_telefono1,
  78.                 `emp_direccion`=Emp_direccion1,
  79.                 `emp_email`=Emp_email1,
  80.                 `emp_celular`=Emp_celular1,
  81.                 `emp_descripcion`=Emp_descripcion1,
  82.                 `emp_nombre_usu`=Emp_nombre_usu1,
  83.                 `emp_contrasena`=Emp_contrasena1
  84.             WHERE `emp_codigo`=Emp_codigo1;
  85.             SELECT'se actualizo';
  86.         END IF;
  87.     END IF;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)