Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   nombres de tablas en un SP (https://www.clubdelphi.com/foros/showthread.php?t=51382)

akela 13-12-2007 20:18:37

nombres de tablas en un procediemiento almacenado IB
 
saludos amigos:

estoy utilizando INTERBASE 7.0 cree un Procedimiento Almacenado para obtener datos de algunas tablas.

ahora tengo que hacer que ese procediemineto recupere datos de todas las tablas, las tablas tienen un nombre similar que es el Siguiente:

NOMaammcc
MOVaammcc

donde aa es el año
mm es el mes
cc es el consecutivo de la tabla

como ven los ultimos 4 caracteres varían, había pensado en pasar el nombre de la tabla como un parametro (en informix si se puede hacer) pero IB me marca un error,

¿alguien sabe como podría recorrer todas las tablas de mi BD sin tener que hacer un PA para cada una? en otras palabras ¿alguien sabe como hacer para poner un nombre de tabla dinámico en un PA?

saludos.

PD. este el el PA:

Código SQL [-]
LTER PROCEDURE ACUMULA_CPTOS
RETURNS
(rfc char(13),cpto char(2),pd char(1), importe numeric(15,2) )
AS
DECLARE VARIABLE RFCS char(13);
DECLARE VARIABLE cpt char(2);
DECLARE VARIABLE tipo char(1);
DECLARE VARIABLE impo numeric(15,2);
BEGIN
FOR SELECT rfc,concepto, perc_ded, sum(importe) FROM nom070100 n, mov070100 m WHERE n.id=m.id_nom
GROUP by rfc,concepto,perc_ded ORDER by RFC, perc_ded, concepto
INTO
:rfcs,:cpt,:tipo,:impo DO
BEGIN
RFC = :rfcs;
cpto = :cpt;
pd = :tipo;
importe = :impo;
SUSPEND;
END


END

Lepe 14-12-2007 18:29:18

En Interbase no sé si soporta EXECUTE STATEMENT, y menos aún en un for select. Intuitivamente y muy propenso a error sería:

El nombre de la tabla lo pasas como varchar(20).

Código SQL [-]
declare variable strSql varchar(80)
as
strSql = 'select * from ' || nombreTabla || ' where ....';
for EXECUTE STATEMENT strSql do
begin

end;

... Por intentarlo que no quede ;).


Saludos

akela 14-12-2007 21:11:34

gracias por responder Lepe,

te comento que esa instrucción no está soportada en IB 7.0 :'( y estoy viendo que Firebird es una opción muy interesante, sólo que en este momento tenemos muchos sistemas en producción con IB y pensar en una migración de momento lo veo complicado.

de casualidad sabes si hay unequivalente al Execute Estatement en IB?

yo me pongo a investigar lo mismo en google ahora mismo.

gracias.


La franja horaria es GMT +2. Ahora son las 03:55:43.

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