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

Procedure Stored, he leido articulos, ejemplos pero no logro con esto

Estas en el tema de Procedure Stored, he leido articulos, ejemplos pero no logro con esto en el foro de Mysql en Foros del Web. Saludos, qusiera que este Procedure me retornara varios registros pero no lo hace, no entiendo por que. Los llamo desde mysql @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: ...
  #1 (permalink)  
Antiguo 03/10/2014, 19:17
 
Fecha de Ingreso: febrero-2013
Ubicación: Cali Colombia
Mensajes: 118
Antigüedad: 11 años, 1 mes
Puntos: 0
Procedure Stored, he leido articulos, ejemplos pero no logro con esto

Saludos, qusiera que este Procedure me retornara varios registros pero no lo hace,
no entiendo por que.

Los llamo desde mysql
Código MySQL:
Ver original
  1. call  salarios_procedure(@nombre,@apellido,@departamento);
  2. SELECT @nombre,@apellido,@departamento;
y solo sale esto:
Código MySQL:
Ver original
  1. +---------+-----------+----------------+
  2. | @nombre | @apellido | @departamento  |
  3. +---------+-----------+----------------+
  4. | NULL    | NULL      | ADMINISTRACION |
  5. +---------+-----------+----------------+

No deberia salir pues en la consulta si me generan mas registros, por favor les pido colaboracion.

Código MySQL:
Ver original
  1. DELIMITER //
  2. CREATE PROCEDURE salarios_procedure(OUT nombre VARCHAR(10), OUT apellido VARCHAR(10),OUT departamento VARCHAR(15))
  3.    DECLARE no_more_row INT;
  4.    
  5. -- DECLARE nombre varchar(10);
  6.  --   DECLARE apellido varchar(10);
  7.   --  DECLARE departamento varchar(10);
  8.     DECLARE c1 CURSOR FOR
  9.     SELECT Nombre ,Apellido,nomDepartamento
  10.     FROM cargoxempleado ca
  11.     INNER JOIN empleados e ON ca.codEmpleado = e.codEmpleado
  12.     INNER JOIN departamentos d ON d.codDepartamento = ca.codDepartamento
  13.     WHERE salario < 2000000;
  14.     DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_row =1 ;
  15.     OPEN c1;
  16.     loop1:LOOP
  17.         FETCH c1 INTO nombre,apellido,departamento;
  18.         if no_more_row = 1 then
  19.             LEAVE loop1;
  20.            
  21.         end if;
  22.     end loop loop1;
  23.     close c1;
  24. //

Última edición por gnzsoloyo; 03/10/2014 a las 19:56
  #2 (permalink)  
Antiguo 03/10/2014, 20:02
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: Procedure Stored, he leido articulos, ejemplos pero no logro con esto

Cita:
Saludos, qusiera que este Procedure me retornara varios registros pero no lo hace,
En primer lugar, si buscas que te devuelva varios registros, no puedes intentar recuperarlos con los parámetros de entrada/salida, porque MySQL no tiene tipos de datos array, record, ni table.
Para que devuelva N registros por SP, la última sentencia del SP debe ser el SELECT de la consulta:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE PROCEDURE salarios_procedure(OUT nombre VARCHAR(10), OUT apellido VARCHAR(10), OUT departamento VARCHAR(15))
  3.     SELECT Nombre ,Apellido,nomDepartamento
  4.     FROM cargoxempleado ca
  5.     INNER JOIN empleados e ON ca.codEmpleado = e.codEmpleado
  6.     INNER JOIN departamentos d ON d.codDepartamento = ca.codDepartamento
  7.     WHERE salario < 2000000;
  8. END$$
En segundo lugar, las variables de usuario de MySQL (las que se usan con "@"), se deben inicializar antes de ser usadas, porque sino su valor es NULL, y toda suma, resta, multiplicación, división, concatenación o agregación de cualquier cosa con NULL da... NULL.
En otras palabras, para poder usar esas variables en la llamada del CALL, primero tienes que asignarles un valor. De lo contrario cualquier cosa que entre a ellas dentro del SP se perderá.
¿Se entiende?
__________________
¿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: procedure
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 08:16.