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 :