Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 1 Semana
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 399
Poder: 12
shoulder Va por buen camino
Stored Procedure

Hola estoy con un motor mysql 5.6 no encuentro forma de visualizar datos con un loop no se que estoy haciendo mail, no me da error al crear el proceso y la tabla y el campo estan bien y hay 400 registros. Gracias (dejo el ejemplo).


Cita:


DELIMITER $$
DROP PROCEDURE IF EXISTS `empresa`.`usuarios` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `usuarios`(
OUT mails varchar(400))
BEGIN
DECLARE no_more_records INTEGER DEFAULT 0;
DECLARE v_email varchar(100) DEFAULT "";
DECLARE cur_EventRanks CURSOR FOR
select mail from usuario;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_records=1;
set no_more_records = 0;
open cur_EventRanks;
cur_Loop: LOOP
FETCH cur_EventRanks INTO
v_email;
if no_more_records = 1 then
leave cur_Loop;
end if;
SET mails = CONCAT(v_email,";",mails);
END LOOP cur_Loop;
close cur_EventRanks;
END $$
DELIMITER ;
--//La llamada la hago como
call usuarios(@mails)
select @mails




nada me trae en blanco la variable- probe una stored procedure sin loop y funciona e viene la lista de los 400 registros.







Responder Con Cita
  #2  
Antiguo Hace 1 Semana
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.275
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Amigo shoulder, en este mensaje has actuado como un novato, un título no descriptivo, una explicación nada clara, unas etiquetas de cita para código...
En fín, a veces pasa
Responder Con Cita
  #3  
Antiguo Hace 1 Semana
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 389
Poder: 16
mRoman Va por buen camino
Talking

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Amigo shoulder, en este mensaje has actuado como un novato, un título no descriptivo, una explicación nada clara, unas etiquetas de cita para código...
En fín, a veces pasa
Asi de estresado ha de estar !!!... jajaja
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #4  
Antiguo Hace 1 Semana
orodriguezca orodriguezca is offline
Miembro
 
Registrado: ene 2009
Posts: 204
Poder: 11
orodriguezca Va por buen camino
No se mucho de SP en mysql, pero entiendo que ese procedimiento solo devuelve la variable de salida mails y no un conjunto de resultados.

Por otra parte, si en la tabla usuarios hay 400 registros, no veo forma de que esos 400 emails concatenados puedan almacenarse en la variable de salida mails sin que cause un error de truncamiento de datos.
Responder Con Cita
  #5  
Antiguo Hace 1 Semana
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.275
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mRoman Ver Mensaje
Asi de estresado ha de estar !!!... jajaja
Eso mismo pensé
Responder Con Cita
  #6  
Antiguo Hace 1 Semana
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 399
Poder: 12
shoulder Va por buen camino
Stores Procedure no trae datos

Hola primero de todo perdonnn, si estoy estresado, ustedes siempre me ayudaron y lo reconosco..., me faltaba el where, yo quiere hacer que entre en el loop el select y me concatene tres datos que son mails. el tema que no logro, aunque sacando el where (me olvide de escribirlo en el stored) entre dentro del loop, me devuelve la cadena vacia. Busque por internet copie igual a algunos ejemplos pero me devuelve esto : @mails y nada mas sin ningun contenido. Por eso ya por perdido y con stress le habia sacado el where.


El ejemplo seria si tengo un campo oficina que me traiga nada mas los mails de codigo del personal que trabaja en dicha oficina para probar como ejemplo serian tres mails nada mas. Pero nada me aparece como retorno @mails. Si me funciona ya lo aplicaria a otros temas. Tome un select simple como ejemplo.

Gracias.
Responder Con Cita
  #7  
Antiguo Hace 6 Días
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 153
Poder: 6
bucanero Va camino a la fama
el problema puede venir de que no tienes inicializada la variable de salida del procedimiento, por lo que si el valor es NULL, todo lo que concatenes automáticamente sera NULL

De esta forma a mi me funciona, solo he añadido la linea en rojo:

Código SQL [-]
CREATE PROCEDURE `usuarios`(OUT mails varchar(400))
BEGIN
  DECLARE no_more_records INTEGER DEFAULT 0;
  DECLARE v_email VARCHAR(100) DEFAULT "";

  DECLARE cur_EventRanks CURSOR FOR
  SELECT mail FROM usuario;

  DECLARE CONTINUE HANDLER 
      FOR NOT FOUND SET no_more_records=1;

  SET mails=''; -- inicializar la variable de salida
  SET no_more_records = 0;

  OPEN cur_EventRanks;

  cur_Loop:
   LOOP
      FETCH cur_EventRanks   INTO v_email;

      IF no_more_records = 1
      THEN
         LEAVE cur_Loop;
      END IF;

      SET mails = CONCAT(v_email, ";", mails);
   END LOOP cur_Loop;

  CLOSE cur_EventRanks;
END
Responder Con Cita
  #8  
Antiguo Hace 5 Días
shoulder shoulder is offline
Miembro
 
Registrado: abr 2008
Posts: 399
Poder: 12
shoulder Va por buen camino
Store Procedure no trae datos

Gracias, se fue el stress... me funciono como me habias indicado pero tambien agregando la linea select mails. Mil Gracias.
Cita:

CREATE PROCEDURE `usuarios`(OUT mails varchar(400))
BEGIN
DECLARE no_more_records INTEGER DEFAULT 0;
DECLARE v_email VARCHAR(100) DEFAULT "";

DECLARE cur_EventRanks CURSOR FOR
SELECT mail FROM usuario;

DECLARE CONTINUE HANDLER
FOR NOT FOUND SET no_more_records=1;

SET mails=''; -- inicializar la variable de salida
SET no_more_records = 0;

OPEN cur_EventRanks;

cur_Loop:
LOOP
FETCH cur_EventRanks INTO v_email;

IF no_more_records = 1
THEN
LEAVE cur_Loop;
END IF;

SET mails = CONCAT(v_email, ";", mails);
END LOOP cur_Loop;
select mails
CLOSE cur_EventRanks;
END



Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Stored Procedure gluglu Conexión con bases de datos 16 24-02-2011 17:41:24
Stored Procedure !!! Ledian_Fdez C++ Builder 0 02-03-2010 14:01:29
Stored Procedure StartKill MySQL 2 27-08-2008 06:18:44
Ver los Stored Procedure tgsistemas SQL 0 06-04-2004 17:18:22
Stored Procedure tgsistemas SQL 1 27-02-2004 13:10:33


La franja horaria es GMT +2. Ahora son las 06:34:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi