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

No funciona While en Phpmyadmin

Estas en el tema de No funciona While en Phpmyadmin en el foro de Mysql en Foros del Web. Nose que es lo que pasa. En MSSQL no tenia estos problemas, pero ahora en MYSQL, si. El primer problema principal, es que no funcionan ...
  #1 (permalink)  
Antiguo 19/07/2011, 15:03
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
No funciona While en Phpmyadmin

Nose que es lo que pasa.
En MSSQL no tenia estos problemas, pero ahora en MYSQL, si.

El primer problema principal, es que no funcionan los WHILE.
Sin importar como lo aplique, no anda.


Solamente uno me lo agarra que es un código que encontré por la web:

Código:
DELIMITER $$SET @v1 = 5;WHILE @v1 > 0 DO   SET @v1 = @v1 - 1;END WHILE;END $$DELIMITER ;
Pruebo editarlo y tampoco.

El segundo problema es que Phpmyadmin no muestra de que se trata el error. Me vuelve loco eso, siempre dice que tengo que consultar el manual.

Nose que será, no solo me pasa con WHILE sinó que con DECLARE también.
Igualmente por lo que tengo entendido (y probado) DECLARE no hace falta usarlo.

(estoy intentando hacer un query de MYSQL para que ejecute cronjob en un php, puedo combinar el while de php + query de sql y así hacerlo, pero no es lo mismo... el tiempo de ejecución es mayor)

Dejo una imágenes de mi phpmyadmin de la página principal (estoy usando xammp 1.7.3 si no me equivoco...):



Si alguien seria tan amable de decirme porque pasa esto o si estoy aplicando mal los códigos o que se lo agradeceria mucho. Y mejor aún si tienen un código muy simple funcional que use WHILE y lo pueda probar y así tener de referencia.

MIL GRACIAS DESDE YA!
  #2 (permalink)  
Antiguo 19/07/2011, 16:18
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
Respuesta: No funciona While en Phpmyadmin

Someone idea?
  #3 (permalink)  
Antiguo 19/07/2011, 17:52
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: No funciona While en Phpmyadmin

¿Estás haciendo un stored procedure o quieres hacer un script para que haga algo?

En MySQL, WHILE es un cotrolador de flujo que sólo opera en un stored procedure, y no en un script.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 19/07/2011, 18:14
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
Respuesta: No funciona While en Phpmyadmin

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Estás haciendo un stored procedure o quieres hacer un script para que haga algo?

En MySQL, WHILE es un cotrolador de flujo que sólo opera en un stored procedure, y no en un script.
Lo que quiero hacer es lo mismo que aria con los Jobs de MSSQL en SQL Server Management Studio. Solamente que aquí al usar Cpanel armaria un php con la funcion mysql_query() y dentro de el, el job que quiero ejecutar en MYSQL.

Un ejemplo equivalente funcional que tengo en MSSQL seria:

Código:
DECLARE @countmin int
DECLARE @countmax int
DECLARE @guild varchar(300)

SET @countmin = (SELECT TOP 1 IDHELPJ FROM UserLogin.dbo.HelPJ ORDER BY IDHELPJ ASC);
SET @countmax = (SELECT TOP 1 IDHELPJ FROM UserLogin.dbo.HelPJ ORDER BY IDHELPJ DESC);

WHILE (@countmin <= @countmax)    
BEGIN
	SET @guild = (SELECT GuildID FROM Tantra.dbo.TantraBackup00 WHERE UserID = (SELECT IDCUENTA FROM UserLogin.dbo.HelPJ WHERE IDHELPJ = @countmin));
		IF @guild != 0
		BEGIN
			UPDATE UserLogin.dbo.HelPJ SET CLANACTUAL = @guild WHERE IDHELPJ = @countmin;
		END
		ELSE
		BEGIN
			UPDATE UserLogin.dbo.HelPJ SET CLANACTUAL = NULL WHERE IDHELPJ = @countmin;
		END

	SET @countmin = @countmin + 1

END
Obviamente, no tengo bien en claro a que te refieres con un Stored Procedure, pero al parecer si, ya que uso Scripts cortos, de una sola linea en mssql sin ningún problema.

¿Que solucion se le puede dar?
¿Combinar funciones de php y microscripts de mysql? (se que se puede pero el rendimiento no es el mismo)


... es por ese motivo que pienso hacer la mayor parte posible en MYSQL y que se encargue el.

Mil gracias gnzsoloyo master desde ya por tu interés.
  #5 (permalink)  
Antiguo 19/07/2011, 19:41
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: No funciona While en Phpmyadmin

Vamos por partes:

- Lo primero que tienes que entender es que no existe un estándar en el T-SQL, por lo que técnicamente no existe un lenguaje unificado para scripts (esos "jobs" a los que te refieres) entre los diferentes DBMS (Oracle, SQL Server, DB2, MySQL, etc.), sino que cada uno de ellos pone y saca cosas como se le antoja, como así también agrega funciones propias para el estandar SQL.
Por estas razones migrar scripts entre DBMS es una tarea muy engorrosa y bastante cansadora.

- SQL Server y Oracle incluyeron dentro de su versión de T-SQL controles de flujo como WHILE, pero MySQL sólo los implementó en stored procedures (por cierto, trabajar en bases de datos y no saber qué es un stored procedure es algo medio extraño), por lo que no podrás crear scripts de SQL para MySQL que los contengan. Si puedes hacerlo en un SP, y en el script podrás invocar a los SP, por lo que hay alguna forma de burlar este impedimento.
Técnicamente hablando, el código de muestra que pones en tu post, sería un stored procedure si se invoca bajo un nombre determinado.

- El uso de parámetros, variables de usuario y variables locales de procedimientos no están implementadas de la misma forma en los diferentes DBMS. Para implementar este mismo proceso de ejemplo requiere una explicación más detallada de la forma de programar los SP.


- Una primera aproximación a tu caso de ejemplo sería:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE `procedimiento001` ()
  4.     DECLARE countmin INT;
  5.     DECLARE countmax INT;
  6.     DECLARE guild varchar(300);
  7.     SELECT MIN(IDHELPJ), MAX(IDHELPJ) FROM UserLogin.HelPJ INTO countmin, countmax;
  8.     WHILE countmin <= countmax DO
  9.         SET guild = (SELECT GuildID
  10.                     FROM Tantra.TantraBackup00 T INNER JOIN UserLogin.HelPJ H ON T.UserID = H.IDHELPJ
  11.                     WHERE IDHELPJ = countmin LIMIT 1);
  12.         IF guild IS NOT NULL AND guild !=0 THEN
  13.             UPDATE UserLogin.HelPJ SET CLANACTUAL = guild WHERE IDHELPJ = countmin;
  14.         ELSE
  15.             UPDATE UserLogin.HelPJ SET CLANACTUAL = NULL WHERE IDHELPJ = countmin;
  16.         END IF;
  17.         SET countmin = countmin + 1;
  18.     END WHILE;
  19. END$$
  20.  
  21. DELIMITER;

Desde aqui se pueden observar algunas cosas:
- Las variables locales de un stored procedure no llevan "@". Solo las de usuario lo usan, pero ese es un tema especial.
- No se anidan los BEGIN/END en MySQL. Se peuden encadenar, pero no anidar.
- Todo SP multilínea debe llevar BEGIN/END.
- Todas las sentencias se terminan con ";".
- Para hacer que el script del SP se carge de un solo golpe, se cambian los delimitadores de sentencia por otro, y luego se los restaura (no se hace si se cargan desde un lenguaje de programación).
- La sintaxis de WHILE es distinta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 20/07/2011, 16:18
 
Fecha de Ingreso: abril-2010
Ubicación: Ping: BSAS - Arg
Mensajes: 791
Antigüedad: 14 años
Puntos: 25
Respuesta: No funciona While en Phpmyadmin

Te pasaste!


Si no te agregaria karma seria un inconciente.
Voy a probarlo y creo que ya con esto saldrá todo bien.
Muy claro.

Mil gracias por la buena predisposición, por el ejemplo y la explicación, osea...
Por todo!
  #7 (permalink)  
Antiguo 20/07/2011, 17:58
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: No funciona While en Phpmyadmin

No hay de qué. para eso andamos por acá...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: php, phpmyadmin, query, 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 19:28.