Oracle - Truncar tabla antes de cargar datos.

 
Vista:
sin imagen de perfil
Val: 17
Ha aumentado 1 puesto en Oracle (en relación al último mes)
Gráfica de Oracle

Truncar tabla antes de cargar datos.

Publicado por Alejandro (10 intervenciones) el 13/09/2018 19:41:45
Hola amigos del foro, acudo a ustedes porque soy novato en plsql y estoy contra el tiempo. Necesito por favor me ayuden a identificar donde debo colocar un execute immediate que trunque la tabla agregada, antes de cargar los insert select.

Ejemplo:

truncate table A

1- insert into table A ( select * from tabla 1)
2- insert into table A ( select * from table 2)
3- insert into table A ( select * from table 3)

Tabla A debiera tener la información de los 3 insert , sin embargo solo tiene la del 3er insert.

Les agradezco la ayuda, acá les dejo el código muchas gracias.

declare
lv_proceso number;
lv_tab_agg varchar2 (50);
lv_tabla varchar2 (50);
lv_sinonimo varchar2 (8);
lv_col_user varchar2 (4000);
lv_join varchar2 (4000);
lv_where varchar2 (4000);
lv_filtros varchar2 (4000);
lv_sql_select varchar2 (4000);
lv_sql_into varchar2 (4000);
lv_col_into varchar2 (4000);

cursor c_obt_tab is
select distinct
bafuin.bafuin_nmb_sin
,bafuin.bafuin_nmb_tab
,bafuin.bafuin_gls_fil
,case
when badida.batipr_seq_cdg = 1 then 'BAP_AGG_REAL'
when badida.batipr_seq_cdg = 2 then 'BAP_AGG_PPTO'
when badida.batipr_seq_cdg = 3 then 'BAP_AGG_PROY'
when badida.batipr_seq_cdg = 4 then 'BAP_AGG_BC_BDG_NY'
when badida.batipr_seq_cdg = 5 then 'BAP_AGG_BC_BDG_AY'
when badida.batipr_seq_cdg = 6 then 'BAP_AGG_BC_FORECAST'
when badida.batipr_seq_cdg = 7 then 'BAP_AGG_BC_LASTYEAR'
end tabla_agg
from bap_dicc_dato badida
inner join bap_fuentes_info bafuin
on badida.bafuin_seq_cdg = bafuin.bafuin_seq_cdg
and badida.batipr_seq_cdg = bafuin.batipr_seq_cdg
inner join bap_tpo_proceso batipr
on badida.bafuin_seq_cdg = bafuin.bafuin_seq_cdg
and badida.batipr_seq_cdg = bafuin.batipr_seq_cdg
and badida.batipr_seq_cdg = batipr.batipr_seq_cdg
order by 2 asc;
cursor c_obt_col (p_tab varchar2) is
select distinct
badida.badida_nmb_tec_col,badida.badida_nmb_col_dst--,badida.bafuin_seq_cdg,badida.batipr_seq_cdg
from bap_dicc_dato badida
inner join bap_fuentes_info bafuin
on badida.bafuin_seq_cdg = bafuin.bafuin_seq_cdg
inner join bap_par_col_user bacolu
on trim(badida.badida_nmb_col_user)=trim(bacolu.bacolu_nmb_col_user)
where bafuin.bafuin_nmb_tab = p_tab;

cursor c_obt_join (p_tab varchar2)is
select distinct badida.badida_gls_log_cruce
from bap_dicc_dato badida
inner join bap_fuentes_info bafuin
on badida.bafuin_seq_cdg = bafuin.bafuin_seq_cdg
where bafuin.bafuin_nmb_tab = p_tab;

cursor c_obt_fil (p_tab varchar2) is
select ('and '||badida.badida_nmb_tec_col||' '||bafilu.bafilu_dsc_cond_fil || ' ' || bafilu.bafilu_gls_val_fil)
as filtro
from bap_dicc_dato badida
inner join bap_fuentes_info bafuin
on badida.bafuin_seq_cdg = bafuin.bafuin_seq_cdg
inner join bap_par_fil_user bafilu
on trim (badida.badida_nmb_col_user) =
trim (bafilu.bafilu_nmb_col_user)
where bafuin.bafuin_nmb_tab = p_tab;

begin

lv_tabla := null;-- limpio variable
lv_sinonimo := null;-- limpio variable
lv_where := null;-- limpio variable
lv_tab_agg := null;

for r_cur_obt_tab in c_obt_tab loop

lv_col_user := null;-- limpio variable
lv_col_into := null;
lv_join := null;-- limpio variable
lv_filtros := null;-- limpio variable
lv_sql_select := null;-- limpio variable
lv_tab_agg := r_cur_obt_tab.tabla_agg;
lv_tabla := r_cur_obt_tab.bafuin_nmb_tab;
lv_sinonimo := r_cur_obt_tab.bafuin_nmb_sin;
lv_where := r_cur_obt_tab.bafuin_gls_fil;

--anexa columnas
for r_cur_obt_col in c_obt_col (r_cur_obt_tab.bafuin_nmb_tab)
loop
lv_col_user := lv_col_user || ',' || r_cur_obt_col.badida_nmb_tec_col;
lv_col_into := lv_col_into || ',' || r_cur_obt_col.badida_nmb_col_dst;
end loop;
--anexa join
for r_cur_obt_join in c_obt_join (r_cur_obt_tab.bafuin_nmb_tab)
loop
lv_join := lv_join ||' '||r_cur_obt_join.badida_gls_log_cruce;
end loop;
--anexa filtros de usuario
for r_cur_obt_fil in c_obt_fil (r_cur_obt_tab.bafuin_nmb_tab)
loop
lv_filtros := lv_filtros ||' '||r_cur_obt_fil.filtro;
end loop;

lv_sql_into := ('INSERT INTO '|| lv_tab_agg || '( ' || ltrim (lv_col_into, ',')|| ' )');
-- dbms_output.put_line ( lv_sql_into );

lv_sql_select := ('SELECT ' || ltrim (lv_col_user, ',') || ' FROM ' || lv_tabla || ' ' || lv_sinonimo || lv_join || ' ' || lv_where || lv_filtros );
-- dbms_output.put_line ( lv_sql_select );

dbms_output.put_line ( 'truncar tabla' lv_tab_agg );

dbms_output.put_line ( lv_sql_into || lv_sql_select );

end loop;
end loop;
end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder