2009-03-09 13 views
9

Tengo un procedimiento almacenado de MySQL con algunos cursores. Quiero imprimir un valor para enviar de vuelta la salida al cliente. SQLyog Enterprise.Cómo simular una impresión en un procedimiento almacenado de MySQL

Intenté declarar una variable como TEXTO y concatenar dentro del bucle, pero eso no funciona, al menos no de la manera en que estaba tratando de hacerlo.

DECLARE _output TEXT; 
DECLARE _ID INT DEFAULT 0; 
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

OPEN cur1; 

REPEAT 
    FETCH cur1 INTO _ID; 
    IF NOT done THEN 
    SET _output = _ID; /*SEE ALT BELOW*/ 

    END IF; 
UNTIL done END REPEAT; 
CLOSE cur1; 

SELECT _output; 

que he probado:

SET _output = _output + _ID 

y

SET _output = CONCAT(_output,_ID) 

pero ambos sólo devuelven NULL

SET _output = _ID; sólo me da la última fila recuperada. Lo cual es útil, pero no del todo lo que quería.

¿Cuál es la mejor manera de tener cada salida de fila recogida en la pantalla para reproducir la impresión MySQL en un procedimiento almacenado de MySQL?

Respuesta

14

Lo está haciendo correctamente con su SELECT _output; Todo lo que se seleccione sin una cláusula INTO será devuelto al cliente.

Para obtener todos ellos, puede mover el SELECTO al lazo (para imprimirlos individualmente), o puede juntarlos juntos. El problema con su concat que devuelve NULL fue porque no inicializó el _output a nada, por lo que era NULL. Conceder cualquier cosa con NULL devolverá NULL.

intente lo siguiente:

DECLARE _output TEXT DEFAULT ''; 
DECLARE _ID INT DEFAULT 0; 
DECLARE cur1 CURSOR FOR SELECT ID FROM CodeID; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; 

OPEN cur1; 

REPEAT 
    FETCH cur1 INTO _ID; 
    IF NOT done THEN 
    SET _output = CONCAT(",", _ID); /*SEE ALT BELOW*/ 

    END IF; 
UNTIL done END REPEAT; 
CLOSE cur1; 

SELECT _output; 
+6

En caso de que no sea 'set _output = concat (_output, "", _ID);' De lo contrario, sólo tendrá la última ID – Marcus

Cuestiones relacionadas