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 originalmysql> DELIMITER $$
Query OK, 0 rows affected, 1 warning (0.00 sec)
-> SET variable1
= 'birds'; -> SET variable1
= 'beasts'; Query OK, 0 rows affected (0.09 sec)
mysql>
mysql> DELIMITER ;
Query OK, 0 rows affected (0.00 sec)
mysql
> CALL procedure1
(17,@total
);Query OK, 0 rows affected (0.00 sec)
+--------+
| @total |
+--------+
| birds |
+--------+
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 originalmysql> DELIMITER $$
Query OK, 0 rows affected (0.00 sec)
-> SET @total
= 'beasts'; Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> DELIMITER ;
mysql>
Query OK, 0 rows affected (0.00 sec)
mysql
> CALL procedure1
(17);Query OK, 0 rows affected (0.00 sec)
+--------+
| @total |
+--------+
| birds |
+--------+
Y también funciona en MySQL Query Browser,
en tanto la conexión donde se genere el bloque de llamada sea la misma.