am trying to execute this procrdure code to get the min, max and sum of all column in database but am stuck in an error, am trying to insert into a table the min and max if data_type column in ('VARCHAR2','TIMESTAMP(6)','CHAR','DATE','INTERVAL DAY(9) TO SECOND(9)','INTERVAL DAY(2) TO SECOND(6)') and if it is 'Number' to calculate sum if neither both it should write '###'
create or replace PROCEDURE COMPARAISON_TEST AS
BEGIN
declare
cursor c_tab is
select all_tab_cols.owner
, all_tab_cols.table_name
, all_tab_cols.column_name
, all_tab_cols.data_type
, all_tables.num_rows
from all_tab_cols
left join all_tables on
all_tab_cols.table_name = all_tables.table_name
where all_tab_cols.data_type in ('VARCHAR2','TIMESTAMP(6)','CHAR','DATE','INTERVAL DAY(9) TO
SECOND(9)','INTERVAL DAY(2) TO SECOND(6)','NUMBER')
and all_tab_cols.table_name not like '\_%' escape '\'
and all_tab_cols.owner in ('ODS','DWH','DQM','SCL','STG')
and all_tables.num_rows not in ('0');
v_sql VARCHAR2 (300);
v_val VARCHAR2 (300);
v_sqln VARCHAR2 (300);
v_valn VARCHAR2 (300);
v_sqls VARCHAR2 (300);
v_vals VARCHAR2 (300);
dat_situ date;
begin
dat_situ := current_date;
for r_tab in c_tab loop
if r_tab.data_type = 'VARCHAR2' and
all_tab_cols.data_type = 'TIMESTAMP(6)' and
all_tab_cols.data_type = 'CHAR' and
all_tab_cols.data_type = 'DATE' and
all_tab_cols.data_type = 'INTERVAL DAY(9) TO SECOND(9)' and
all_tab_cols.data_type = 'INTERVAL DAY(2) TO SECOND(6)'
then
v_sql := 'select max('||r_tab.column_name||') from '||r_tab.owner||'.'||r_tab.table_name;
v_sqln := 'select min('||r_tab.column_name||') from '||r_tab.owner||'.'||r_tab.table_name;
else if all_tab_cols.data_type = 'NUMBER'
then
v_sqls := 'select sum('||r_tab.column_name||') from '||r_tab.owner||'.'||r_tab.table_name;
else
v_sql := '###';
v_sqln := '###';
v_sqls := '###';
execute immediate v_sql into v_val;
execute immediate v_sqln into v_valn;
execute immediate v_sqls into v_vals;
DBMS_OUTPUT.ENABLE(buffer_size => null);
dbms_output.put_line(r_tab.owner||' : '||r_tab.table_name||' : '||r_tab.column_name||' : '|| v_val||' : '||v_valn||' : '||v_vals||' : '||dat_situ||' : '||r_tab.num_rows);
insert into MOE_COLMINMAX (owner,table_name,column_name,column_max,column_min,dat_situ,num_rows)
values (r_tab.owner,r_tab.table_name,r_tab.column_name,v_val,v_valn,dat_situ,r_tab.num_rows);
commit;
end if;
end loop;
end;
END COMPARAISON_TEST;
ERRORS
Erreur(67,5): PLS-00103: Symbole "LOOP" rencontré à la place d'un des symboles suivants : if
Erreur(69,5): PLS-00103: Symbole "COMPARAISON_TEST" rencontré à la place d'un des symboles suivants : ;
Aucun commentaire:
Enregistrer un commentaire