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
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.