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

Stored Procedure select e insert juntos

Estas en el tema de Stored Procedure select e insert juntos en el foro de Mysql en Foros del Web. saludos... tengo el sig SP @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original CREATE   PROCEDURE EjecutarDefault ( ) BEGIN declare Usuario INT ; declare Publicacion INT ...
  #1 (permalink)  
Antiguo 13/04/2012, 11:27
 
Fecha de Ingreso: marzo-2012
Ubicación: Guanajuato
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 1
Stored Procedure select e insert juntos

saludos...

tengo el sig SP



Código MySQL:
Ver original
  1. CREATE  PROCEDURE EjecutarDefault()
  2. declare Usuario INT;
  3. declare Publicacion INT;
  4.  
  5. SELECT DISTINCT p.IdPublicacion into Publicacion, ug.IdUsuario into Usuario FROM usuario_grupo ug
  6. JOIN grupo g ON g.idGrupo= ug.idGrupo
  7. JOIN grupo_publicacion gp ON gp.IdGrupo = g.IdGrupo
  8. JOIN publicacion p ON p.IdPublicacion = gp.IdPublicacion
  9. WHERE gp.reglaOpciones LIKE '%AD%'  
  10. AND ug.permisosUsuario = 'Lector'  
  11. AND DATE(p.fechaLimite)=CURDATE()
  12. AND p.IdPublicacion = gp.IdPublicacion AND p.IdPublicacion NOT IN (SELECT up.IdPublicacion
  13.                                   FROM usuario_publicacion up
  14.                                   WHERE up.IdUsuario = ug.idUsuario);
  15.  
  16. INSERT INTO usuario_publicacion(IdUsuario, IdPublicacion, dictamen, comentariosPublicos, comentariosPrivados, fechaDictamen, condicionAprobacion)
  17.                                     VALUES(Usuario , Publicacion , 5, 'Se aprobo por default','El usuario no reviso la publicacion', now(),' ');
  18.  




El select tal y como esta me arroja los registros que necesito USUARIO y *PUBLICACIÓN para luego Insertarlos en la siguiente sentencia*

pro me manda este error


Código MySQL:
Ver original
  1. MySQL ha dicho:
  2.  
  3. #1327 - Undeclared variable: ug

no tengo mucha experiencia en SP ya que casi con Bases de datos no me involucro pro me toco trabajar de lleno esta vez asi que si me pueden ayudar se los agradecería..
  #2 (permalink)  
Antiguo 13/04/2012, 11:42
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: Stored Procedure select e insert juntos

El problema está en la subconsulta que usas en el NOT EXIST.
En el contexto de esa, el alias "ug" que invocas, no existe, por lo que no puede reconocerlo. Al menos en el caso de MySQL, esos bloques no comparten los nombres con la consulta mayor.
Además, si lo analizas detenidamente, esa consulta debería en realidad formar parte de la mayor a través de un LEFT JOIN, por ejemplo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/04/2012, 12:12
 
Fecha de Ingreso: marzo-2012
Ubicación: Guanajuato
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Stored Procedure select e insert juntos

gracias por contestar

la subconsulta la pongo como condición por que si los registros no existen en otra tabla los selecciona, para eso el NOT IN, entonces en el SP como tal no funciona mi consulta?? por que la hice aparte y me genero los resultados esperados

yo veo mas el error en que en la primer consulta no asigna el alias "ug" a la tabla, probe eliminando esa subconsulta y el error continua

cual es tu propuesta estoy algo confundido y cansado jaja y no me vienen las ideas..

Última edición por na_nho; 13/04/2012 a las 12:27
  #4 (permalink)  
Antiguo 13/04/2012, 13:11
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: Stored Procedure select e insert juntos

Probémoslo así:
Código MySQL:
Ver original
  1. CREATE  PROCEDURE EjecutarDefault()
  2.     DECLARE Usuario INT;
  3.     DECLARE Publicacion INT;
  4.  
  5.     SELECT DISTINCT p.IdPublicacion, ug.IdUsuario
  6.         INTO Publicacion, Usuario
  7.     FROM
  8.         usuario_grupo ug
  9.         INNER JOIN grupo g ON ug.idGrupo = g.idGrupo
  10.         INNER JOIN grupo_publicacion gp ON g.IdGrupo = gp.IdGrupo
  11.         INNER JOIN publicacion p ON gp.IdPublicacion = p.IdPublicacion
  12.     WHERE
  13.         gp.reglaOpciones LIKE '%AD%'  
  14.         AND ug.permisosUsuario = 'Lector'  
  15.         AND DATE(p.fechaLimite)=CURDATE()
  16.         AND p.IdPublicacion = gp.IdPublicacion
  17.         AND p.IdPublicacion NOT IN (SELECT up.IdPublicacion FROM usuario_publicacion up WHERE up.IdUsuario = ug.idUsuario);
  18.  
  19.     INSERT INTO usuario_publicacion(IdUsuario, IdPublicacion, dictamen, comentariosPublicos, comentariosPrivados, fechaDictamen, condicionAprobacion)
  20.     VALUES(Usuario , Publicacion , 5, 'Se aprobo por default','El usuario no reviso la publicacion', NOW(),' ');
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 13/04/2012, 14:38
 
Fecha de Ingreso: marzo-2012
Ubicación: Guanajuato
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Stored Procedure select e insert juntos

gracias gnzsoloyo

si se ejecuto correctamente el SP...

pero
una duda mas
al llamarlo, siempre se va afectan mas de una filas y me arroja error
ayuda para poder hacer que se afecten a todas las filas seleccionadas..

Última edición por na_nho; 13/04/2012 a las 14:59
  #6 (permalink)  
Antiguo 13/04/2012, 15:00
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: Stored Procedure select e insert juntos

Así como está, sólo devolverá registros si las relaciones de las tablas se cumplen todas sin excepciones.
Si una de las relaciones es pcional, se debe usar LEFT JOIN o RIGHT JOIN, pero hay que hacerlo con cuidado para no generar productos cartesianos, o dependencias inexistentes.
Empieza por allí.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 16/04/2012, 12:31
 
Fecha de Ingreso: marzo-2012
Ubicación: Guanajuato
Mensajes: 40
Antigüedad: 12 años, 1 mes
Puntos: 1
Respuesta: Stored Procedure select e insert juntos

quedo resuelto

dejo el código para cualquier duda..

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS EjecutarDefaultGrupo$$
  2. CREATE  PROCEDURE EjecutarDefaultGrupo()
  3.    
  4.  
  5.        INSERT INTO usuario_publicacion(IdUsuario, IdPublicacion, dictamen, comentariosPublicos, comentariosPrivados,
  6.  
  7. fechaDictamen, condicionAprobacion)
  8.  
  9. SELECT DISTINCT ug.IdUsuario, p.IdPublicacion,   5, 'Se aprobó por default','El usuario no reviso la publicación', NOW(),' '
  10.      
  11.     FROM
  12.         usuario_grupo ug
  13.         INNER JOIN grupo g ON ug.idGrupo = g.idGrupo
  14.         INNER JOIN grupo_publicacion gp ON g.IdGrupo = gp.IdGrupo
  15.         INNER JOIN publicacion p ON gp.IdPublicacion = p.IdPublicacion
  16.     WHERE
  17.         gp.reglaOpciones LIKE '%AD%'  
  18.         AND ug.permisosUsuario = 'Lector'  
  19.         AND DATE(p.fechaLimite)<CURDATE()
  20.         AND p.IdPublicacion = gp.IdPublicacion
  21.         AND p.IdPublicacion NOT IN (SELECT up.IdPublicacion FROM usuario_publicacion up WHERE up.IdUsuario = ug.idUsuario)
  22.  
  23. AND ug.IdUsuario NOT IN (SELECT up.IdUsuario
  24.                          FROM usuario_publicacion up
  25.                          WHERE up.IdPublicacion = gp.IdPublicacion );
  26.    

Etiquetas: storedprocedure
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 04:03.