Oracle
 sql >> Base de données >  >> RDS >> Oracle

Je veux rechercher une valeur spécifique dans toutes les colonnes de toutes les tables dans Oracle 11g

Vous pouvez le faire avec une seule requête même si c'est un peu compliqué. Cette requête recherchera toutes les colonnes CHAR et VARCHAR2 dans le schéma actuel pour la chaîne 'JONES'

select table_name,
       column_name
  from( select table_name,
               column_name,
               to_number(
                 extractvalue(
                   xmltype(
                     dbms_xmlgen.getxml(
                       'select count(*) c from ' || table_name ||
                       ' where to_char(' || column_name || ') = ''JONES'''
                     )
                   ),
                   'ROWSET/ROW/C'
                 )
               ) cnt
          from (select utc.*, rownum
                  from user_tab_columns utc
                 where data_type in ('CHAR', 'VARCHAR2') ) )
 where cnt >= 0

Notez qu'il s'agit d'une version adaptée de la requête de Laurent Schneider pour compter les lignes de chaque table avec une seule requête.