Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Ich möchte einen bestimmten Wert in allen Spalten aller Tabellen in Oracle 11g suchen

Sie können dies mit einer einzigen Abfrage tun, obwohl es etwas kompliziert ist. Diese Abfrage durchsucht alle CHAR- und VARCHAR2-Spalten im aktuellen Schema nach der Zeichenfolge '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

Beachten Sie, dass dies eine angepasste Version der Abfrage von Laurent Schneider zu Zähle die Zeilen in jeder Tabelle mit einer einzigen Abfrage.