Código SQL
[-]SET TERM ^ ;
CREATE OR ALTER PROCEDURE PRUEBA
returns (
consulta1 varchar(500))
as
declare variable consulta varchar(500);
declare variable campo varchar(250);
begin
CONSULTA1= 'INSERT INTO TABLA1 ';
CONSULTA = ' SELECT ';
for select f.rdb$field_name
from rdb$relation_fields f
left join rdb$fields fs on fs.rdb$field_name = f.rdb$field_source
left join rdb$field_dimensions d on d.rdb$field_name = fs.rdb$field_name
left join rdb$character_sets cr on fs.rdb$character_set_id = cr.rdb$character_set_id
left join rdb$collations co on ((f.rdb$collation_id = co.rdb$collation_id) and
(fs.rdb$character_set_id = co.rdb$character_set_id))
where f.rdb$relation_name = 'TABLA1'
order by f.rdb$field_position, d.rdb$dimension
into :CAMPO
do
begin
CONSULTA= CONSULTA||TRIM(CAMPO)||',' ;
--suspend;
end
CONSULTA1=CONSULTA1||CONSULTA||' from TABLA2';
end^
Poniendo un par de parámetros que sean el nombre de la tabla y el del generador, no creo que sea demasiado difícil terminar el procedimiento.
Faltaría quitar la última coma de la relación de campos, pero lo dejo como ejercicio para los principiantes
![Big Grin](http://www.clubdelphi.com/foros/images/smilies/biggrin.gif)
![Big Grin](http://www.clubdelphi.com/foros/images/smilies/biggrin.gif)
Saludos
PD: Por supuesto que algún gurú dirá que se puede optimizar; claro que sí, pero no voy a poner todo el ejercicio resuelto.
![Wink](http://www.clubdelphi.com/foros/images/smilies/wink.gif)