set serverout on -- ligne de code pour forcer l'affichage dbms_output.
put_line
DECLARE --declare_1 pour nom des tables
myBDD varchar (80) := 'DWH - 2 REC3 - VEOS' ;
v_total NUMBER;
CURSOR liste_table_BDD IS SELECT table_name FROM user_tables;
record_table user_tables%rowtype;
BEGIN --begin_1 pour nom des tables
FOR record_table in liste_table_BDD LOOP
dbms_output.put_line('-- --------------------------- --');
dbms_output.put_line('Traitement de la table : '|| record_table.table_name
|| ' ');
dbms_output.put_line('-- --------------------------- --');
declare --declare_2 pour nom des colonnes
myTable varchar(80) := record_table.table_name;
cursor liste_column is select column_name from user_tab_columns where
table_name = record_table.table_name ;
record_column user_tab_columns%rowtype;
begin --begin_2 pour nom des colonnes
FOR record_column in liste_column LOOP
--dbms_output.put_line('Traitement de la colonne : '||
record_column.column_name || ' depuis la table : ' || myTable ||'');
--dbms_output.put_line('select '|| record_column.column_name ||' ,
count(*) nb from '|| myTable ||' group by '|| record_column.column_name ||' order
by nb DESC;');
--EXECUTE IMMEDIATE 'select '|| record_column.column_name ||' ,
count(*) nb from '|| myTable ||' group by '|| record_column.column_name ||' order
by nb DESC';
DECLARE --declare_3 pour les requetes
myColumn varchar(120) := record_column.column_name ;
v_total NUMBER;
v_null NUMBER;
v_NonNull NUMBER;
v_completude NUMBER;
v_Top1 varchar(500);
BEGIN -- begin_3 pour les requetes
-- TAUX DE COMPLETUDE D UNE COLONNE
-- CALCUL DU POURCENTAGE DE CELLULE 'NULL' PAR RAPPORT AU
NOMBRE DE VALEURS
EXECUTE IMMEDIATE 'select count(*) from '|| myTable INTO
v_total;
--dbms_output.put_line('v-total is ' || v_total);
EXECUTE IMMEDIATE('select count(*) from '|| myTable ||'
where '|| myColumn ||' is null ') INTO v_null;
--dbms_output.put_line('v-null is ' || v_null);
EXECUTE IMMEDIATE('select count(*) from '|| myTable ||'
where ' || myColumn || ' is not null ' ) INTO v_NonNull;
v_completude := ( v_NonNull / v_total) * 100;
v_completude := ROUND (v_completude, 2) ; -- arrondir aux 2
chiffres après la virgule
dbms_output.put_line('La colonne ' || myColumn || ' de la
table '|| myTable ||' est complète à ' || v_completude|| ' %' );
dbms_output.put_line( 'Nombre d enregistrement ne contenant
ni de null : ' || v_NonNull );
dbms_output.put_line(v_null || ' valeur(s) nulle(s) pour '
||v_total || ' valeur(s) totale(s)' );
end;
END LOOP;--endLoop_2 pour nom des colonnes
end;--end_2 pour nom des colonnes
END LOOP; --endLoop_1 pour nom des tables
end; -- end_1 pour nom des tables