sql >> Base de Datos >  >> RDS >> Oracle

Quiero buscar un valor específico en todas las columnas de todas las tablas en Oracle 11g

Puede hacerlo con una sola consulta, aunque es un poco complicado. Esta consulta buscará en todas las columnas CHAR y VARCHAR2 en el esquema actual la cadena '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

Tenga en cuenta que esta es una versión adaptada de la consulta de Laurent Schneider a cuenta las filas en cada tabla con una sola consulta.