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

¿Pasar procedimiento Firebird a My SQL?

Estas en el tema de ¿Pasar procedimiento Firebird a My SQL? en el foro de Mysql en Foros del Web. Hola tengo el siguiente procedimiento en Firebird: Código: CREATE OR ALTER PROCEDURE DIAS_SIN RETURNS ( "RESULT" INTEGER ) AS DECLARE VARIABLE AUX INTEGER; BEGIN AUX ...
  #1 (permalink)  
Antiguo 30/09/2019, 05:46
 
Fecha de Ingreso: enero-2012
Mensajes: 51
Antigüedad: 7 años, 9 meses
Puntos: 1
Pregunta ¿Pasar procedimiento Firebird a My SQL?

Hola tengo el siguiente procedimiento en Firebird:
Código:
CREATE OR ALTER PROCEDURE DIAS_SIN RETURNS (
	"RESULT" INTEGER
)
AS
DECLARE VARIABLE AUX INTEGER;
BEGIN
  AUX    = 0;
  RESULT = 0;
  FOR
    SELECT max(DATEDIFF(DAY FROM DT2.FECHA TO DT1.FECHA))
  FROM DATOS DT1, DATOS DT2
  WHERE DT1.SALIDA_NUM = DT2.SALIDA_NUM + 1 
    INTO :AUX
  DO
    IF(AUX > RESULT) THEN RESULT = AUX;
  SUSPEND;
END
Estoy intentando convertirlo a MySQL me atasco en el SELECT. ¿Puede alguien echarme una mano? Gracias.
  #2 (permalink)  
Antiguo 30/09/2019, 08:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: ¿Pasar procedimiento Firebird a My SQL?

Algo asi:

Código MySQL:
Ver original
  1. select max(datediff(dt2.fecha,dt1.fecha)) as fecha into @aux from datos as dt1
  2. inner join datos as dt2 on (dt1.salida_num=dt2.salida_num+1)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 30/09/2019, 09:56
 
Fecha de Ingreso: enero-2012
Mensajes: 51
Antigüedad: 7 años, 9 meses
Puntos: 1
Pregunta Respuesta: ¿Pasar procedimiento Firebird a My SQL?

Hola de nuevo, he modificado mi procedimiento así:
Código:
delimiter $$;

CREATE PROCEDURE dias_sin (out resultado INT)
 
  BEGIN
  
	declare aux INT default 0;
 	declare resultado INT default 0; 
  
 FOR
 
select max(datediff(dt2.fecha,dt1.fecha)) as fecha into @aux from datos as dt1
inner join datos as dt2 on (dt1.salida_num=dt2.salida_num+1); 

DO 

IF(aux > resultado) THEN resultado = aux;
 
 SUSPEND; END$$
 
 delimiter;
Me devuelve error. ¿Qué tengo mal?. Gracias.
  #4 (permalink)  
Antiguo 30/09/2019, 10:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: ¿Pasar procedimiento Firebird a My SQL?

Código MySQL:
Ver original
  1. select max(datediff(dt2.fecha,dt1.fecha)) as fecha into aux from datos as dt1
  2. inner join datos as dt2 on (dt1.salida_num=dt2.salida_num+1);

Prueba asi, y que error te devuelve?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 30/09/2019, 10:17
 
Fecha de Ingreso: enero-2012
Mensajes: 51
Antigüedad: 7 años, 9 meses
Puntos: 1
Respuesta: ¿Pasar procedimiento Firebird a My SQL?

Me dice unnamed error en la query. No lo entiendo, sólo hay que recorrer la tabla y comparar cada fecha con la siguiente y devolver la mayor diferencia entre fechas encontrada.
  #6 (permalink)  
Antiguo 30/09/2019, 11:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.404
Antigüedad: 13 años, 2 meses
Puntos: 774
Respuesta: ¿Pasar procedimiento Firebird a My SQL?

Dale una leida al tutorial de mysql, en mysql no se usa ni el FOR ni el DO

http://www.mysqltutorial.org/variabl...rocedures.aspx
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 01/10/2019, 00:42
 
Fecha de Ingreso: enero-2012
Mensajes: 51
Antigüedad: 7 años, 9 meses
Puntos: 1
De acuerdo Respuesta: ¿Pasar procedimiento Firebird a My SQL?

Gracias. Me pongo a ello. Un saludo.
  #8 (permalink)  
Antiguo 01/10/2019, 02:53
 
Fecha de Ingreso: enero-2012
Mensajes: 51
Antigüedad: 7 años, 9 meses
Puntos: 1
Pregunta Respuesta: ¿Pasar procedimiento Firebird a My SQL?

Hola, después de estar probando he llegado a la conclusión de que no entiendo mucho el funcionamiento de MySQL, la función al final queda:
Código:
delimiter $$

DROP PROCEDURE IF EXISTS dias_sin $$

CREATE PROCEDURE dias_sin (out resultado INT) 
 
  BEGIN
  
	 declare aux INT DEFAULT 1;	 
 	 declare resultado INT DEFAULT 0;	   
  
 	while aux>resultado do
 
		select max(datediff(dt2.fecha,dt1.fecha)) as fecha into aux from datos as dt1
		inner join datos as dt2 on (dt1.salida_num=dt2.salida_num+1);	 

		  set resultado = aux;		  
		  
	END while;	
	 
 END$$
 
 delimiter;
Me da error de sintaxis en la línea 1 cerca de delimiter. No lo entiendo.



La zona horaria es GMT -6. Ahora son las 21:04.