Oracle – un like multiple

 Oracle – requête SQL avec un « like multiple »

Sous Oracle on a régulièrement besoin de comparer une chaine de caractère, par exemple, si je veux la liste de toutes les tables qui ne commencent pas par ‘TMP’ :

select table_name, column_name 
from user_tab_columns 
where table_name not like 'TMP_%';

On a ensuite besoin de combiner cette utilisation du like, par exemple toutes les tables qui ne commencent ni par ‘TMP’, ni par ‘WRK’ ni par ‘OLD’ :

select table_name, column_name 
from user_tab_columns 
where table_name not like 'TMP_%'
and table_name not like 'WRK_%'
and table_name not like 'OLD_%';

On arrive ainsi à des requêtes peu élégantes. On peut utiliser le regexp_like (généralement peu utilisé) ce qui donne pour la même requête que ci-dessus :

select table_name, column_name 
from user_tab_columns 
where not regexp_like(table_name, 'TMP_|WRK_|OLD_');

Ce genre de requête aura en plus pour intérêt qu’on pourra facilement paramétrer une variable à utiliser dans le regexp_like, par exemple pour une utilisation interactive :

select table_name, column_name 
from user_tab_columns 
where not regexp_like(table_name, :filtre);

Qui ouvrira sous TOAD la fenêtre suivante :

 

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *