PDA

Ver la Versión Completa : nombres de tablas en un SP


akela
13-12-2007, 20:18:37
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 [-] (http://www.clubdelphi.com/foros/#)
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).


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.