Ver Mensaje Individual
  #6 (permalink)  
Antiguo 16/01/2011, 17:23
Avatar de gnzsoloyo
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, 5 meses
Puntos: 2658
Respuesta: Procedimientos con OUT

Mira, el procedure funciona con las variables tal y como lo he puesto, y esta es una demostración hecha en la consola de MySQL (MySQL Command Line):
Código MySQL:
Ver original
  1. mysql> DELIMITER $$
  2. mysql> DROP PROCEDURE IF EXISTS `procedure1` $$
  3. Query OK, 0 rows affected, 1 warning (0.00 sec)
  4.  
  5. mysql> CREATE PROCEDURE `procedure1`
  6.     -> (IN parameter1 INTEGER,
  7.     -> OUT variable1 VARCHAR(7))
  8.     -> BEGIN
  9.     ->   IF parameter1 = 17 THEN
  10.     ->       SET variable1 = 'birds';
  11.     ->     ELSE
  12.     ->       SET variable1 = 'beasts';
  13.     ->   END IF;
  14.     -> END $$
  15. Query OK, 0 rows affected (0.09 sec)
  16.  
  17. mysql>
  18. mysql> DELIMITER ;
  19. mysql> SET  @total = '';
  20. Query OK, 0 rows affected (0.00 sec)
  21.  
  22. mysql> CALL procedure1(17,@total);
  23. Query OK, 0 rows affected (0.00 sec)
  24.  
  25. mysql> SELECT @total;
  26. +--------+
  27. | @total |
  28. +--------+
  29. | birds  |
  30. +--------+
  31. 1 row in set (0.00 sec)

Como puedes ver, la variable no sólo está bien declarada como te dije, e inicializada, sino que ha tomado perfectamente el valor de salida de la variable local "variable1" (recordar que las variables del prototipo son locales, mientras que las que llevan @ son globales en la conexión).
Incluso, usando el segundo ejemplo, también funciona:
Código MySQL:
Ver original
  1. mysql> DELIMITER $$
  2. mysql> DROP PROCEDURE IF EXISTS `procedure1` $$
  3. Query OK, 0 rows affected (0.00 sec)
  4.  
  5. mysql> CREATE PROCEDURE `procedure1`
  6.     -> (IN parameter1 INTEGER)
  7.     -> BEGIN
  8.     ->   IF parameter1 = 17 THEN
  9.     ->       SET @total = 'birds';
  10.     ->     ELSE
  11.     ->       SET @total = 'beasts';
  12.     ->   END IF;
  13.     -> END $$
  14. Query OK, 0 rows affected (0.00 sec)
  15.  
  16. mysql>
  17. mysql> DELIMITER ;
  18. mysql>
  19. mysql> SET  @total = '';
  20. Query OK, 0 rows affected (0.00 sec)
  21.  
  22. mysql> CALL procedure1(17);
  23. Query OK, 0 rows affected (0.00 sec)
  24.  
  25. mysql> SELECT @total;
  26. +--------+
  27. | @total |
  28. +--------+
  29. | birds  |
  30. +--------+
  31. 1 row in set (0.00 sec)

Y también funciona en MySQL Query Browser, en tanto la conexión donde se genere el bloque de llamada sea la misma.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)