dimanche 27 novembre 2011

Recherche dans Oracle

Très souvent, nos éditeurs préférés ne prennent pas la peine de nous fournir des informations pertinentes sur le modèle de données de leurs produits.

Lors d’un changement de nomenclatures nous avons la plus grande difficulté pour évaluer l’impact de ce changement sur les données déjà présentes dans la base de données, alors nous devons allez à la pêche.
C’est à cette problématique que j’ai dû répondre récemment, et je vous livre l’approche que j’ai eue
: Tout d’abord, j’ai créé une requête qui produit un script de recherche. La seule information dont je disposais était que la chaine recherchée, en l’occurrence un compte de comptabilité générale, était une chaine de 6 caractères dont une occurrence commençait par 602.
Je me suis donc appuyé sur les vues systèmes all_tab_columns et all_tables, la jointure n’étant là que pour ne garder que les colonnes des tables et éliminer les colonnes des vues :
select  'select ''' || t.table_name || ''' || chr(9) || '''
   ||   c.column_name || ''' || chr(9) || Count(*) n from '
   ||   t.owner || '.' || t.table_name || ' where '
   ||   c.column_name || ' like ''602___'';' "-- SQL"
from    all_tab_columns c,
        all_tables t
where   t.owner ='XXX'
  and   c.table_name = t.table_name
  and   c.owner = t.owner
  and   c.data_type = 'VARCHAR2';

Le résultat est un script constitué d’un ensemble de requêtes dont le résultat individuel est une chaine de caractères contenant la table, la colonne testée et le nombre d’occurrences de chaines de caractères commençants par 602 et ayant 5 caractères.
Attention, le nombre requêtes à exécuter dans ce script peut être important et chacune d’elle peut être relativement agressive sur la base de données. Il convient donc d’être prudent lors de l’exécution du script, en particulier si vous travaillez sur une base de production.

Aucun commentaire:

Enregistrer un commentaire