Ver Mensaje Individual
  #32  
Antiguo 08-02-2012
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.408
Reputación: 22
fjcg02 Va camino a la fama
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
  /* Procedure Text */
 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.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita