mardi 28 juin 2011

Script PL/SQL Oracle Data Scanner v0.1

Après la publication du script PL/SQL d'hier, je me permets de créer donc le projet "Script PL/SQL Oracle Data Scanner" dont la version est actuellement en v0.1. L'objectif premier est de créer un script qui permet de rechercher une valeur dans une base de données Oracle en itérant sur tous les enregistrements de toutes les tables d'une base de données Oracle.

Pour chaque table, cette amélioration du script permet de compter tous les enregistrements de chacune, et liste les champs de chacune des tables également. Pour des raisons encore non élucidées, il y a des exceptions sur certaines tables système (probablement des droits qui ne permettent pas de les lire).
declare
myvar varchar2(1024);
i number;
myresult varchar2(1024);
myval varchar2(1024);
nbrec number;
begin
dbms_output.enable(500000);
for t in (select t.* from all_tables t where t.table_name like '%') loop
myvar := t.table_name;
dbms_output.put_line('table name = ' || myvar);

begin
execute immediate ('select count(*) from ' || t.table_name)
into nbrec;
dbms_output.put_line(' Nb records = ' || nbrec);
exception
when others then
dbms_output.put_line(' *** exception count ***');
end;

for u in (select u.* from all_tab_columns u where u.table_name = myvar) loop
dbms_output.put_line(' column name = ' || u.column_name);
end loop;
end loop;
end;

lundi 27 juin 2011

PL/SQL Oracle Scanner tous les champs de toutes les tables

declare
myvar varchar2(1024);
i number;
myresult varchar2(1024);
begin
for t in (select t.* from all_tables t where t.table_name like 'MARESTRICTIONDETABLE%') loop
myvar := t.table_name;
dbms_output.put_line('table name = ' || myvar);

for u in (select u.* from all_tab_columns u where u.table_name = myvar) loop
dbms_output.put_line('column name = ' || u.column_name);
end loop;

end loop;
end;

Avant de lancer l'exécution de ce script, mettez une restriction en remplaçant MARESTRICTIONDETABLE.

Si vous ne voulez aucune restriction, on peut étendre le champs d'application à absolument toutes les tables d'une base de données Oracle en supprimant la clause WHERE suivante

where t.table_name like 'MARESTRICTIONDETABLE%'

Have Fun !