Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Procedimeinto alamcenado con un IF NOT EXISTS sintasis correcta

Estas en el tema de Procedimeinto alamcenado con un IF NOT EXISTS sintasis correcta en el foro de Mysql en Foros del Web. Les explico, lo que sucede es que tengo un procedimeinto almacenado, lo construi en MYSQL WORKBEACH y no me marca ningun error hasta la hora ...
  #1 (permalink)  
Antiguo 03/07/2012, 13:29
 
Fecha de Ingreso: julio-2012
Mensajes: 12
Antigüedad: 11 años, 10 meses
Puntos: 0
Pregunta Procedimeinto alamcenado con un IF NOT EXISTS sintasis correcta

Les explico, lo que sucede es que tengo un procedimeinto almacenado, lo construi en MYSQL WORKBEACH y no me marca ningun error hasta la hora de crearlo me marca un error de sintaxis en la linea 36 que es donde esta mi IF NOT EXISTS, he estado buscanod pero no encuentro una respuesta, lo que trato de hacer con esto esque si se el ID ya no existe agregue el registro y si existe lo actualize

Este es mi procedimiento
Código:
CREATE PROCEDURE agenda_pacientes(
IN pac_nom VARCHAR(100),
IN pac_ap VARCHAR(60),
IN pac_am VARCHAR(60),
IN pac_sex CHAR(1),
IN pac_fec VARCHAR(60),
IN pac_not VARCHAR(200),
IN dir_IDp VARCHAR(200),
IN dir_cal VARCHAR(100),
IN dir_num INT,
IN dir_col VARCHAR(100),
IN dir_mud VARCHAR(100),
IN dir_edo VARCHAR(100),
IN dir_cp INT,
IN dir_tel INT,
IN mad_nom VARCHAR(100),
IN mad_ap VARCHAR(60),
IN mad_am VARCHAR(60),
IN mad_fec VARCHAR(60),
IN mad_pes DECIMAL(10,3),
IN mad_est DECIMAL(10,2),
IN mad_not VARCHAR(200),
IN pad_nom VARCHAR(100),
IN pad_ap VARCHAR(60),
IN pad_am VARCHAR(60),
IN pad_fec VARCHAR(60),
IN pad_pes DECIMAL(10,3),
IN pad_est DECIMAL(10,2),
IN pad_not VARCHAR(200),
IN esc_IDd INT,
IN esc_gra VARCHAR(5),
IN esc_gru VARCHAR(5))

BEGIN
 IF NOT EXISTS (SELECT * FROM pacientes WHERE ID_paciente=dir_IDp) THEN
  INSERT INTO pacientes (nombre,ap_paterno,ap_materno,sexo,fecha_nacimiento,nota) values (pac_nom,pac_ap,pac_am,pac_sex,pac_fec,pac_not);
  INSERT INTO direcciones (ID_paciente,calle,numero,colonia,municipio_delegacion,estado,cod_postal,telefono) VALUES (dir_IDp,dir_cal,dir_num,dir_col,dir_mud,dir_edo,dir_cp,dir_tel);
  INSERT INTO madres (ID_paciente,nombre,ap_paterno,ap_materno,fecha_nacimiento,peso,estatura,nota) VALUES (dir_IDp,mad_nom,mad_ap,mad_am,mad_fec,mad_pes,mad_est,mad_not);
  INSERT INTO padres (ID_paciente,nombre,ap_paterno,ap_materno,fecha_nacimiento,peso,estatura,nota) VALUES (dir_IDp,pad_nom,pad_ap,pad_am,pad_fec,pad_pes,pad_est,pad_not);
  INSERT INTO escuelas(ID_paciente,ID_dir_escuela,grado,grupo) VALUES (dir_IDp,esc_IDd,esc_gra,esc_gru);
  
 ELSE 
  UPDATE pacientes SET nombre=pac_nom, ap_paterno=pac_ap, ap_materno=pac_am, sexo=pac_sex, fecha_nacimiento=pac_fec, nota=pac_not WHERE ID_paciente=dir_IDp;  
  UPDATE direcciones SET calle=dir_cal. numero=dir_num, colonia=dir_col,municipio_delegacion=dir_mud, cod_postal=dir_cp,telefono=dir_tel WHERE ID_paciente=dir_IDp;
  UPDATE madres SET nombre=mad_nom, ap_paterno=mad_ap, ap_materno=mad_am, fecha_nacimiento=mad_fec, peso=mad_pes, estatura=mad_est, nota=mad_not WHERE ID_paciente=dir_IDp;
  UPDATE padres SET nombre=pad_nom, ap_paterno=pad_ap, ap_materno=pad_am, fecha_nacimiento=pad_fec, peso=pad_pes, estatura=pad_est, nota=pad_not WHERE ID_paciente=dir_IDp;
  UPDATE escuelas SET ID_dir_escuela=esc_IDd, grado=esc_gra, grupo=esc_gru WHERE ID_paciente=dir_IDp;
 END IF;    
END;
Gracias

Última edición por cn16cn; 03/07/2012 a las 13:43
  #2 (permalink)  
Antiguo 03/07/2012, 14:19
Avatar de 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: Procedimeinto alamcenado con un IF NOT EXISTS sintasis correcta

A veces me ha pasado que el NOT EXIST no me resulta en ese contexto:
Código MySQL:
Ver original
  1. CREATE PROCEDURE agenda_pacientes(
  2. IN pac_nom VARCHAR(100),
  3. IN pac_ap VARCHAR(60),
  4. IN pac_am VARCHAR(60),
  5. IN pac_sex CHAR(1),
  6. IN pac_fec VARCHAR(60),
  7. IN pac_not VARCHAR(200),
  8. IN dir_IDp VARCHAR(200),
  9. IN dir_cal VARCHAR(100),
  10. IN dir_num INT,
  11. IN dir_col VARCHAR(100),
  12. IN dir_mud VARCHAR(100),
  13. IN dir_edo VARCHAR(100),
  14. IN dir_cp INT,
  15. IN dir_tel INT,
  16. IN mad_nom VARCHAR(100),
  17. IN mad_ap VARCHAR(60),
  18. IN mad_am VARCHAR(60),
  19. IN mad_fec VARCHAR(60),
  20. IN mad_pes DECIMAL(10,3),
  21. IN mad_est DECIMAL(10,2),
  22. IN mad_not VARCHAR(200),
  23. IN pad_nom VARCHAR(100),
  24. IN pad_ap VARCHAR(60),
  25. IN pad_am VARCHAR(60),
  26. IN pad_fec VARCHAR(60),
  27. IN pad_pes DECIMAL(10,3),
  28. IN pad_est DECIMAL(10,2),
  29. IN pad_not VARCHAR(200),
  30. IN esc_IDd INT,
  31. IN esc_gra VARCHAR(5),
  32. IN esc_gru VARCHAR(5))
  33.  
  34.  IF (SELECT * FROM pacientes WHERE ID_paciente=dir_IDp) IS NULL THEN
  35.   INSERT INTO pacientes (nombre,ap_paterno,ap_materno,sexo,fecha_nacimiento,nota) values (pac_nom,pac_ap,pac_am,pac_sex,pac_fec,pac_not);
  36.   INSERT INTO direcciones (ID_paciente,calle,numero,colonia,municipio_delegacion,estado,cod_postal,telefono) VALUES (dir_IDp,dir_cal,dir_num,dir_col,dir_mud,dir_edo,dir_cp,dir_tel);
  37.   INSERT INTO madres (ID_paciente,nombre,ap_paterno,ap_materno,fecha_nacimiento,peso,estatura,nota) VALUES (dir_IDp,mad_nom,mad_ap,mad_am,mad_fec,mad_pes,mad_est,mad_not);
  38.   INSERT INTO padres (ID_paciente,nombre,ap_paterno,ap_materno,fecha_nacimiento,peso,estatura,nota) VALUES (dir_IDp,pad_nom,pad_ap,pad_am,pad_fec,pad_pes,pad_est,pad_not);
  39.   INSERT INTO escuelas(ID_paciente,ID_dir_escuela,grado,grupo) VALUES (dir_IDp,esc_IDd,esc_gra,esc_gru);
  40.  
  41.  ELSE
  42.   UPDATE pacientes SET nombre=pac_nom, ap_paterno=pac_ap, ap_materno=pac_am, sexo=pac_sex, fecha_nacimiento=pac_fec, nota=pac_not WHERE ID_paciente=dir_IDp;  
  43.   UPDATE direcciones SET calle=dir_cal. numero=dir_num, colonia=dir_col,municipio_delegacion=dir_mud, cod_postal=dir_cp,telefono=dir_tel WHERE ID_paciente=dir_IDp;
  44.   UPDATE madres SET nombre=mad_nom, ap_paterno=mad_ap, ap_materno=mad_am, fecha_nacimiento=mad_fec, peso=mad_pes, estatura=mad_est, nota=mad_not WHERE ID_paciente=dir_IDp;
  45.   UPDATE padres SET nombre=pad_nom, ap_paterno=pad_ap, ap_materno=pad_am, fecha_nacimiento=pad_fec, peso=pad_pes, estatura=pad_est, nota=pad_not WHERE ID_paciente=dir_IDp;
  46.   UPDATE escuelas SET ID_dir_escuela=esc_IDd, grado=esc_gra, grupo=esc_gru WHERE ID_paciente=dir_IDp;
  47.  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)

Última edición por gnzsoloyo; 03/07/2012 a las 14:47
  #3 (permalink)  
Antiguo 03/07/2012, 14:38
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Respuesta: Procedimeinto alamcenado con un IF NOT EXISTS sintasis correcta

Hola cn16cn,

Quizás es necesario que cambies el DELIMITER

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE agenda_pacientes(
  4. /* PARAMETROS */
  5. )
  6. /* CUERPO */
  7. END $$
  8.  
  9. DELIMITER ;

Etiquetas: procedurestore
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:03.