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

Crear cursores en mySQL

Estas en el tema de Crear cursores en mySQL en el foro de Mysql en Foros del Web. Buenos días a todos, estoy intentado crear un cursor en Mysql a partir de un cursor en SQL server. Estoy teniendo problemas con la sintaxis ...
  #1 (permalink)  
Antiguo 24/09/2015, 03:37
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 9 años, 5 meses
Puntos: 1
Pregunta Crear cursores en mySQL

Buenos días a todos, estoy intentado crear un cursor en Mysql a partir de un cursor en SQL server. Estoy teniendo problemas con la sintaxis en mysql y no dejan de saltarme errores. ¿Podéis echarme un cable?

Sentencia en SQL SERVER
Código SQL:
Ver original
  1. DECLARE @REF_CORTA nvarchar(255), @FECHA_SELL DATE
  2.     DECLARE cursor_1
  3.     CURSOR FOR
  4.     SELECT ref_corta, copia_sellada FROM [dbo].[actualizacion_fecha]
  5.     OPEN cursor_1
  6.     FETCH NEXT FROM cursor_1 INTO @REF_CORTA, @FECHA_SELL
  7.     WHILE (@@FETCH_STATUS = 0)
  8.     BEGIN
  9.         UPDATE [dbo].[basica] SET
  10.         copia_sellada = @FECHA_SELL      
  11.         WHERE ref_corta = @REF_CORTA
  12.         FETCH NEXT FROM cursor_1 INTO @REF_CORTA, @FECHA_SELL
  13.     END
  14.     CLOSE cursor_1
  15.     DEALLOCATE cursor_1


Sentencia mysql
Código SQL:
Ver original
  1. DECLARE fecha_sell DATE;
  2. DECLARE ref_corta VARCHAR(250);
  3. DECLARE cursor_1
  4. cursor FOR
  5.     SELECT ref_cortas, fecha_copia
  6.     FROM basica;
  7. OPEN cursor_1
  8. fetch NEXT
  9.     FROM cursor_1 INTO ref_corta, fecha_sell;
  10.     while @@fetch_status=0
  11.     BEGIN
  12.         UPDATE basica SET fecha_copia=fecha_sell
  13.         WHERE ref_cortas = ref_corta
  14.         fetch NEXT
  15.             FROM cursor_1 INTO ref_corta, fecha_sell;
  16.     END
  17. close cursor_1;
  18. deallocate cursor_1;

Error principal que me da(Por dar el último)
"#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 'declare fecha_sell date' at line 1 "

¡Muchas gracias a todos!

Última edición por gnzsoloyo; 24/09/2015 a las 06:08
  #2 (permalink)  
Antiguo 24/09/2015, 04:33
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: Crear cursores en mySQL

Los cursores se manejan diferente en todos los DBMS. En MySQL sólo pueden existir dentro de un stored procedure, y lo que posteas no lo es para la sintaxis de MySQL.
Ten en cuenta que no existe un lenguaje procedural universal. Cada DBMS tiene el suyo.
En las FAQs de este subforo encontrarás la descripción detallada de como se usan los cursores en MySQL, está al final: http://www.forosdelweb.com/f86/faqs-...1/#post4209262
__________________
¿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; 24/09/2015 a las 06:06
  #3 (permalink)  
Antiguo 24/09/2015, 08:00
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Crear cursores en mySQL

Muchas gracias. He corregido gracias al tutorial el cursor, pero sigue dándome problemas en la primera línea al declarar las variables...He consultado en Google y no me aclara nada...

Código MySQL:
Ver original
  1. CREATE PROCEDURE actualizar()
  2.  
  3. /*variables auxiliares*/
  4.  
  5. DECLARE REF_CORTAS varchar(250);
  6. DECLARE FECHA_COPIA date;
  7. DECLARE ACCION INT DEFAULT 0;
  8.  
  9.  
  10. /*Declaracion del cursor*/
  11.     DECLARE cursor_1 CURSOR FOR
  12.     select ref_corta, fecha_copia FROM basica
  13.     WHERE REF_CORTAS = ref_cortas
  14.     DECLARE CONTINUE HANDLER SALIDA FOR SQLSTATE '20000' SET ACCION = 1;
  15.  
  16. /*comenzamos el recorrido*/
  17.     OPEN cursor_1
  18.     REPEAT
  19.     FETCH cursor_1 INTO REF_CORTAS, FECHA_COPIA
  20.      SET
  21.         copia_sellada = FECHA_COPIA;      
  22.         WHERE ref_corta = REF_CORTAS;
  23.     UNTIL salida END REPEAT
  24.     CLOSE cursor_1;
[/CODE]
Gracias.

Última edición por gnzsoloyo; 24/09/2015 a las 08:10
  #4 (permalink)  
Antiguo 24/09/2015, 08:13
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: Crear cursores en mySQL

Bueno, empecemos por lo básico: ¿Con qué estás intentando crearlo? ¿La consola de MySQL? ¿phpMyadmin? ¿MySQL Workbench?
Dependiendo de eso será lo que te indique hacer...

Yo prefiero usar MySQL Workbench porque esa herramienta te permite crearlos de un modo amigable.

Posdata: Usa los highlights, por favor. NO uses "CODE" como etiquetas, son un fastidio porque no hcen un buen resaltado de código.
__________________
¿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 25/09/2015, 05:52
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Crear cursores en mySQL

Estoy intentando crearlo desde el mySQL, es decir en sentencias directas.
La verdad es que no conozco ninguna herramienta de este tipo.. me la voy a apuntar.

P.D Juro no volver a usar CODE!

Gracias.
  #6 (permalink)  
Antiguo 25/09/2015, 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: 17 años
Puntos: 2658
Respuesta: Crear cursores en mySQL

Cita:
Estoy intentando crearlo desde el mySQL, es decir en sentencias directas.
Bueno, voy a asumir que te refieres a la consola.
La cosa es simple: No puedes cargar manualmente un SP por consola escribiendo así nomás el codigo, linea a línea, porque MySQL interpretará que estás ejecutando esas sentencias... cada una como una unica sentencia, lo que no es correcto.
Para cargar por consola o script un SP de multiples líneas y que MySQL lo interprete como un sólo objeto, tienes que "advertirle que las lineas a ingresar a continuación corresponden a eso.
Eso se hace con un simple DELIMITER, que lo que hace es reemplazar momentaneamente el delimitador de sentencias ";" por otra cosa, mientras lo cargas.
La tarea es tan simple como poner al principio esto:
Código MySQL:
Ver original
  1. DELIMITER $$
escribir toooodo el codigo, y terminarlo con un "$$" en este jemplo, para finamente restaurar el delimitador:
Código MySQL:
Ver original
  1. DELIMITER ;

En otras palabras, sea pos archivo de script como por consola, eset sería el ejemplo de tu caso:

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE actualizar()
  4.  
  5.     /* NO existen variables por fuera del BEGIN/END */
  6.     DECLARE REF_CORTAS varchar(250);
  7.     DECLARE FECHA_COPIA date;
  8.     DECLARE SALIDA BOOLEAN;
  9.     DECLARE ACCION INT DEFAULT 0;
  10.  
  11.     /*Declaracion del cursor*/
  12.     DECLARE cursor_1 CURSOR FOR
  13.     select ref_corta, fecha_copia FROM basica
  14.     WHERE REF_CORTAS = ref_cortas;
  15.  
  16.     DECLARE  CONTINUE HANDLER FOR SQLSTATE '20000' SET ACCION = 1;
  17.  
  18.     /*comenzamos el recorrido*/
  19.     OPEN cursor_1;
  20.     REPEAT
  21.         FETCH cursor_1 INTO REF_CORTAS, FECHA_COPIA;
  22.         /* NO se entiende lo que quieres hacer*/
  23.     UNTIL salida END REPEAT;
  24.     CLOSE cursor_1;
  25.     -- Se cierra con el delimitador declarado:
  26. END$$
  27.  
  28. DELIMITER ;

NOTA: Toda sentecia en MySQL se termina con un ";". SIEMPRE.
__________________
¿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 28/09/2015, 02:07
Avatar de Jvgaas7  
Fecha de Ingreso: julio-2015
Mensajes: 40
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Crear cursores en mySQL

Muchas gracias por la ayuda, me he apuntado todo esto para las próximas veces. ¡Mil gracias!

Etiquetas: cursores, server, sql
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 20:18.