Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Eu quero pesquisar valor específico em todas as colunas de todas as tabelas no oracle 11g


Você pode fazer isso com uma única consulta, embora seja um pouco complicado. Esta consulta pesquisará todas as colunas CHAR e VARCHAR2 no esquema atual para a string '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

Observe que esta é uma versão adaptada da consulta de Laurent Schneider para contar as linhas em cada tabela com uma única consulta.