vendredi 5 juin 2020

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