Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   llamar Procedimiento almacenado en una consulta (https://www.clubdelphi.com/foros/showthread.php?t=57463)

tcp_ip_es 16-06-2008 16:57:51

llamar Procedimiento almacenado en una consulta
 
Hola, estoy probando los Procedimientos Almacenados en MySQL y tengo una duda de lo más tonta o no no se... je je je :D os cuento.... he creado este procedimiento almacenado:

Código:

CREATE PROCEDURE `FxSPA`(IN wfx int, OUT wmes varchar(50))
BEGIN
select CASE wfx
when 1 then 'Enero'
when 2 then 'Febrero'
when 3 then 'Marzo'
when 4 then 'Abril'
when 5 then 'Mayo'
when 6 then 'Junio'
when 7 then 'Julio'
when 8 then 'Agosto'
when 9 then 'Septiembre'
when 10 then 'Octubre'
when 11 then 'Noviembre'
when 12 then 'Diciembre'
end  into wmes;
END

El procedimiento funciona si le llamo asi:

Código:

call fxSPA(5,@mes);

select @mes;

y me saldría "Mayo" como resultado.

Ahora lo que yo quiero es llamar a esa Procedure dentro de una consulta para que me saque el mes de una Fecha algo tal que asi....

Código SQL [-]
select call(month(fecha),@mes) 
from facturas

por supuesto el código de arriba no funciona pero es que no se como hacerlo....

espero que me digais como, muchas gracias de antemano. Saludos, Tony

egostar 16-06-2008 17:11:29

Solo una pregunta, para que hacer esto en un SP si no estas usando ningun dato de la base de datos, no sería mas fácil usar constantes directamente en Delphi?

Código Delphi [-]
Conts
   Meses : Array [1..12] of string = ('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 
                                      'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Novembre', 'Diciembre');

Y lo llamas así

Código Delphi [-]
ShowMessage('Mes seleccionado: '+Meses[5]);

Salud OS

poliburro 16-06-2008 22:45:46

Cita:

Empezado por tcp_ip_es (Mensaje 293860)
Hola, estoy probando los Procedimientos Almacenados en MySQL y tengo una duda de lo más tonta o no no se... je je je :D os cuento.... he creado este procedimiento almacenado:

Código:

CREATE PROCEDURE `FxSPA`(IN wfx int, OUT wmes varchar(50))
BEGIN
select CASE wfx
when 1 then 'Enero'
when 2 then 'Febrero'
when 3 then 'Marzo'
when 4 then 'Abril'
when 5 then 'Mayo'
when 6 then 'Junio'
when 7 then 'Julio'
when 8 then 'Agosto'
when 9 then 'Septiembre'
when 10 then 'Octubre'
when 11 then 'Noviembre'
when 12 then 'Diciembre'
end  into wmes;
END

El procedimiento funciona si le llamo asi:

Código:

call fxSPA(5,@mes);
 
select @mes;

y me saldría "Mayo" como resultado.

Ahora lo que yo quiero es llamar a esa Procedure dentro de una consulta para que me saque el mes de una Fecha algo tal que asi....


Código SQL [-]select call(month(fecha),@mes)
from facturas




por supuesto el código de arriba no funciona pero es que no se como hacerlo....

espero que me digais como, muchas gracias de antemano. Saludos, Tony


No es un Sp lo que debes hacer para eso, sino una función.

Saludos.

tcp_ip_es 17-06-2008 12:47:38

Gracias a los dos, al final como bien ha dicho poliburro, me he hecho una funcion....

Código SQL [-]
CREATE FUNCTION `FMesLiteral`(wfx DATETIME) RETURNS varchar(10)
BEGIN
declare wmes varchar(50);
set wmes='';
CASE month(wfx)
when 1 then set wmes='Enero';
when 2 then set wmes='Febrero';
when 3 then set wmes='Marzo';
when 4 then set wmes='Abril';
when 5 then set wmes= 'Mayo';
when 6 then set wmes='Junio';
when 7 then set wmes='Julio';
when 8 then set wmes='Agosto';
when 9 then set wmes='Septiembre';
when 10 then set wmes='Octubre';
when 11 then set wmes='Noviembre';
when 12 then set wmes='Diciembre';
end CASE;
RETURN wmes;
END

y luego la he llamado desde el select:

Código SQL [-]
Select FMesLiteral(Fx_Factura) from Facturas

Para Egostar decirte que si que utilizo un dato de la BD que es el campo Fx_Factura que es donde meto la fecha de la factura.... de hecho saco más datos y los concateno pero por no liaros lo simplifiqué.... :D

lo dicho muchas gracias por todo, Saludos, Tony

P.D. Y todo esto viene porque la versión que tengo de MySQL la funcion DATE_FORMAT (Fecha, '%M') sale el literal en inglés.... je je je


La franja horaria es GMT +2. Ahora son las 20:07:31.

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