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

Error al llamar a un procedure desde un trigger

Estas en el tema de Error al llamar a un procedure desde un trigger en el foro de Mysql en Foros del Web. Buenos dias, Tengo un procedure que al llamar directamente desde ResultSet tab me funciona, pero al poner este procedure dentro de un trigger me da ...
  #1 (permalink)  
Antiguo 08/10/2009, 05:08
 
Fecha de Ingreso: junio-2009
Mensajes: 174
Antigüedad: 14 años, 10 meses
Puntos: 0
Exclamación Error al llamar a un procedure desde un trigger

Buenos dias,
Tengo un procedure que al llamar directamente desde ResultSet tab me funciona, pero al poner este procedure dentro de un trigger me da este error:

Not allowed to return a result set from a trigger 1415


He mirado meticulosamente que tengan los mismos parámetros pero no encuentro la causa del error !!!.
  #2 (permalink)  
Antiguo 08/10/2009, 06:27
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, 4 meses
Puntos: 2658
Respuesta: Error al llamar a un procedure desde un trigger

El TRIGGER está obteniendo de alguna forma una salida de datos (un SELECT que no queda dentro de variables o dentro de otra tabla), lo que no se admite en los TRIGGER.
__________________
¿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 08/10/2009, 06:46
 
Fecha de Ingreso: junio-2009
Mensajes: 174
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Error al llamar a un procedure desde un trigger

Eso que significa? que no puedo meter dentro del trigger un procedure ?
  #4 (permalink)  
Antiguo 08/10/2009, 07:43
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, 4 meses
Puntos: 2658
Respuesta: Error al llamar a un procedure desde un trigger

Significa, por ejemplo, que no puedes llamar a un procedure cuya última sentencia sea un
Código sql:
Ver original
  1. SELECT * FROM tabla;
porque eso produce una salida externa de datos que un TRIGGER no admite.
Si vas a buscar información desde un TRIGGER a un SP, el SP debe devolver la información sólo a través de parámetros y resolver qué hacer con ellos dentro del TRIGGER.

Tampoco puedes, dentro del TRIGGER poner un SELECT sin un INTO a variables, a menos que sea dentro de la condición de un IF y sólo para evaluar un valor.

Recuerda: Un TRIGGER es una rutina programada que realiza tareas vinculadas a una tabla y que tiene por únicos parámetros de entrada los valores de los campos que se actualizan o se insertan en la tabla, y que no produce valores de salida de ningún tipo. Solamente puede producir salidas hacia otras tablas en tanto el eento de actualización o inserción en la segunda tabla no dispare un TRIGGER con una operación dirigida a la tabla del primer TRIGGER.
__________________
¿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 08/10/2009, 09:08
 
Fecha de Ingreso: junio-2009
Mensajes: 174
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Error al llamar a un procedure desde un trigger

Tenía un
Cita:
SELECT @flag;
para conseguir si ha habido algún error con el PS, ahora le he quitado esa fila y funciona.
Gracias gnzsoloyo, como se te pueden añadir medallitas ?
  #6 (permalink)  
Antiguo 08/10/2009, 09:55
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, 4 meses
Puntos: 2658
Respuesta: Error al llamar a un procedure desde un trigger

No hace falta... me alegra que hayas podido resolverlo.
Es posible que tu idea haya sido inicializar esa variable, ya que las de sesión se crean al invocarlas.
Lo que te convendría sería ponerla directamente en un SET y no en un SELECT; por ejemplo:
Código sql:
Ver original
  1. SET @flag = 0;
__________________
¿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 09/10/2009, 01:00
 
Fecha de Ingreso: junio-2009
Mensajes: 174
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Error al llamar a un procedure desde un trigger

Tenía puesto con el SET, gracias:

Cita:
IF @flag = 1 THEN
SET flag = NULL;
#SELECT @flag;
END IF;
Esto utilizo para comprobar donde ha dejado de funcionar !
  #8 (permalink)  
Antiguo 09/10/2009, 04:26
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, 4 meses
Puntos: 2658
Respuesta: Error al llamar a un procedure desde un trigger

Si, pero lo que sobraba era el SELECT.
En cualquier caso, si un TRIGGER se interrumpe, lo hará por un error de algún tipo, lo que el MySQL devolvería como código de error y la aplicación lo puede capturar.
Respecto de la variable, ese SELECT debe estár en una sentencia posterior a la que disparó el TRIGGER, en la que consultas su estado.
Como las variables de sesión permanecen intactas mientras no se cierra la conexión, su valor se mantendrá incluso hasta la siguiente ejecución. Por ello si o si hay que inicializarla al principio con SET.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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:19.