2011-03-04 122 views
6

Es posible buscar en cada campo de cada tabla un valor particular en Oracle.Quiero valor específico de búsqueda en todas las columnas de todas las tablas en Oracle 11g

quiero hacerlo sin utilizar ningún procedimiento ..

¿Podemos hacerlo con la consulta?

+1

posible duplicado de [Buscar todos los campos en todas las tablas para un valor específico (Oracle)] (http://stackoverflow.com/questions/208493/search-all-fields-in-all-tables-for-a- specific-value-oracle) –

+0

por favor compruebe mi edición .. – Royson

+0

Todavía una estafadora en mi opinión –

Respuesta

12

Puede hacerlo con una sola consulta, aunque es un poco intrincado. Esta consulta buscará todas las columnas CHAR y VARCHAR2 en el esquema actual de 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 del Laurent Schneider a count the rows in every table con una sola consulta.

+0

Funciona como un encanto en 10g también. Pero si cambia el último 'donde cnt> = 0' a 'cnt> 0', genera un error. Para solucionarlo, simplemente ajuste la consulta completa desde una consulta externa, como esta: seleccione x. * De (ARRIBA QUERY) donde x.cnt> 0 –

Cuestiones relacionadas