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

duda con parametro out en un stored procedure

Estas en el tema de duda con parametro out en un stored procedure en el foro de Bases de Datos General en Foros del Web. bueno tengo este SP Código: DELIMITER $$ DROP PROCEDURE IF EXISTS `sp`.`listar2`$$ CREATE PROCEDURE `listar2`(INOUT nombrea VARCHAR(20)) BEGIN SELECT * FROM alumnos WHERE nombre = ...
  #1 (permalink)  
Antiguo 26/05/2011, 13:06
 
Fecha de Ingreso: octubre-2009
Mensajes: 125
Antigüedad: 14 años, 6 meses
Puntos: 2
Pregunta duda con parametro out en un stored procedure

bueno tengo este SP



Código:
DELIMITER $$

DROP PROCEDURE IF EXISTS `sp`.`listar2`$$

CREATE  PROCEDURE `listar2`(INOUT nombrea VARCHAR(20))
BEGIN


	SELECT * FROM alumnos WHERE nombre = nombrea INTO nombrea;
END$$

DELIMITER ;

y para llamarlo uso:

Código:
SET @nombre = 'pepe'
CALL listar2(@nombre)
SELECT @nombre
pero no me regresa todos los registros

esto solo me funciona si cambio el select nombre from alumnos...

pero no con el *

existe alguna forma de ke me regrese todos los valores??
  #2 (permalink)  
Antiguo 26/05/2011, 13:15
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, 5 meses
Puntos: 2658
Respuesta: duda con parametro out en un stored procedure

Es que en realidad nombrea no es @nombre. Nombrea es una variable local, nace y muere en el SP, mientras que @nombre es una variable de usuario que depende de la conexión. Nace al inicializarla y muere cuando la conexión se cierra.
Lo que debes hacer para usarlo es:

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `sp`.`listar2`$$
  4.  
  5. CREATE  PROCEDURE `listar2`(INOUT nombrea VARCHAR(20))
  6.     SELECT * FROM alumnos WHERE nombre = nombrea INTO @nombre;
  7. END$$
  8.  
  9. DELIMITER ;
Luego:
Código MySQL:
Ver original
  1. CALL listar2('pepe');
  2. SELECT @nombre;
o bien:
Código MySQL:
Ver original
  1. SET @nombre = 'pepe';
  2. CALL listar2(@nombre);
  3. SELECT @nombre;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 26/05/2011, 14:00
 
Fecha de Ingreso: octubre-2009
Mensajes: 125
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: duda con parametro out en un stored procedure

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es que en realidad nombrea no es @nombre. Nombrea es una variable local, nace y muere en el SP, mientras que @nombre es una variable de usuario que depende de la conexión. Nace al inicializarla y muere cuando la conexión se cierra.
Lo que debes hacer para usarlo es:

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `sp`.`listar2`$$
  4.  
  5. CREATE  PROCEDURE `listar2`(INOUT nombrea VARCHAR(20))
  6.     SELECT * FROM alumnos WHERE nombre = nombrea INTO @nombre;
  7. END$$
  8.  
  9. DELIMITER ;
Luego:
Código MySQL:
Ver original
  1. CALL listar2('pepe');
  2. SELECT @nombre;
o bien:
Código MySQL:
Ver original
  1. SET @nombre = 'pepe';
  2. CALL listar2(@nombre);
  3. SELECT @nombre;

cuando hago lo ke me dices me tira el mismo error


Error Code : 1222
The used SELECT statements have a different number of columns

ke será
  #4 (permalink)  
Antiguo 26/05/2011, 15:37
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, 5 meses
Puntos: 2658
Respuesta: duda con parametro out en un stored procedure

Obviamente, porque el * se usa para recuperar TODAS las columnas de la tabla, por lo que no puedes usarla para esto. En MySQL no existen los datos de tipo ROW o TABLE, por eso no puedes usar una variable para recuperar un registro entero (no me fijé en ese detalle).
Creo que tienes que replantear toda la idea.
__________________
¿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: mysql, bases-de-datos
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 04:49.