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

Problema con handler cursor en Store procedure.

Estas en el tema de Problema con handler cursor en Store procedure. en el foro de Mysql en Foros del Web. Buenos dias amigos, Tengo un problema q me tiene verde pues no veo la solución. Tengo un SP que me funciona perfectamente en local, corre ...
  #1 (permalink)  
Antiguo 17/05/2014, 05:48
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 8 meses
Puntos: 16
Pregunta Problema con handler cursor en Store procedure.

Buenos dias amigos,

Tengo un problema q me tiene verde pues no veo la solución. Tengo un SP que me funciona perfectamente en local, corre y ejecuta todo lo que requiero, pero estoy intentando pasarlo al servidor (desde el phpmyadmin que es lo que me da el cpanl) y me da el siguiente error:

Código MYSQL:
Ver original
  1. #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limitInicio,limitFin;
  2.  
  3.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;' at line 16


Pero corro el script en local y corre lo crea y ejecuta perfectamente.

Dejo el script aqui:

Código MYSQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE `sp_timeline`(in idUsuario INT,in limitInicio int, in limitFin int)
  4.     DECLARE idAccionUser int(11);
  5.     DECLARE idAccion int(11);
  6.     DECLARE idRegistro int(11);
  7.     DECLARE fechaAccionRealizada timestamp;
  8.     DECLARE descripcionAccion varchar(100);
  9.     DECLARE tablaAccion varchar(100);
  10.     DECLARE campoMedia varchar(60);
  11.     DECLARE campoPrimario varchar(60);
  12.     DECLARE idObjetoMedia int;
  13.     DECLARE objetoMedia varchar(50);
  14.     DECLARE done INT DEFAULT FALSE;
  15.     DECLARE valorContenidoAccion varchar(400);
  16.     DECLARE timeline CURSOR for SELECT id_accion_usuario, id_accion, id_registro, fecha_creacion,   accion, nombre_tabla, campo_primario,campo_media,id_objeto_media, objeto_media
  17.     FROM v_timeline_usuarios where id_usuario=idUsuario order by fecha_creacion desc limit limitInicio,limitFin;
  18.  
  19.  
  20.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  21.    
  22.    
  23.     DROP TEMPORARY TABLE  if exists timeline;
  24.     CREATE TEMPORARY table timeline (
  25.  
  26.     id_accion int,
  27.     contenido_accion varchar(1000),
  28.     accion varchar(100),
  29.     id_objeto_media int(11),
  30.     objeto_media varchar(50),
  31.     fecha_accion timestamp
  32.     );
  33.  
  34.     Open timeline;
  35.         REPEAT
  36.             fetch timeline into
  37.                     idAccionUser,idAccion,idRegistro,fechaAccionRealizada, descripcionAccion,
  38.                     tablaAccion, campoPrimario,campoMedia,idObjetoMedia,objetoMedia;
  39.            
  40.  
  41.            
  42.             set @query = CONCAT("select ", campoMedia ," into @valorContenidoAccion from ", tablaAccion," where ", campoPrimario," = ", idRegistro, ";");
  43.             prepare stm1 from @query;
  44.             EXECUTE stm1;
  45.             deallocate prepare stm1;
  46.  
  47.             INSERT INTO timeline values (idAccionUser,@valorContenidoAccion,descripcionAccion,idObjetoMedia,objetoMedia,fechaAccionRealizada);
  48.        
  49.         UNTIL done END REPEAT;
  50.     CLOSE timeline;
  51.     select * from timeline;
  52.    
Anteriormente tenia la parte del handler asi:
Código MySQL:
Ver original
  1. DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;



Muchas gracias a quien pueda darme una luz.

Gracias.
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos
  #2 (permalink)  
Antiguo 17/05/2014, 10:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con handler cursor en Store procedure.

Por lo pronto: ¿qué versión de MySQL tiene el servidor, y cuál es la que tienes en tu PC de desarrollo?
SI no tienen idéntica versión, no puedes hacer trabajos de desarrollo de SP, porque puedes estar haciendo cosas ilegales en versiones previas, como por ejemplo, hasta cierta versión LIMIT no podías usar variables para los parámetros.
__________________
¿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 17/05/2014, 16:22
 
Fecha de Ingreso: marzo-2011
Ubicación: Caracas
Mensajes: 389
Antigüedad: 13 años, 8 meses
Puntos: 16
Respuesta: Problema con handler cursor en Store procedure.

Hola gnzsoloyo gracias por responder,


Efectivamente debe ser cuestión de las versiones y diste en el clavo exactamente el problema era el limit, le quite el limit y me cargo el SP. la versión q tengo yo es la 5.6 y la versión en el server 5.2

Supongo que debo ver si la gente del hosting puede actualizar el mysql. en caso negativo, se puede usar alguna alternativa?


Muchas gracias.
__________________
Lo imposible es lo posible visto por los ojos de un incapaz.
Si te sirve la respuesta. dale + al karma.
Saludos
  #4 (permalink)  
Antiguo 17/05/2014, 17:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con handler cursor en Store procedure.

La única forma de hacerlo sin que actualicen la versión de MySQL en el host, es que uses sentencias preparadas (http://dev.mysql.com/doc/refman/5.0/es/sqlps.html). No es una mala opción, pero dominarlas lleva algún tiempo, y no las puedes aplicar en un CURSOR, si mal no recuerdo.
__________________
¿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; 18/05/2014 a las 07:08

Etiquetas: campo, cursor, handler, php, registro, select, sql, store, tabla, usuarios
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 11:00.