Я хочу найти конкретное значение во всех столбцах всех таблиц в Oracle 11g - PullRequest
6 голосов
/ 04 марта 2011

Можно ли искать в каждом поле каждой таблицы определенное значение в Oracle.

Я хочу сделать это без использования какой-либо процедуры.

Можем ли мы сделать это с помощью запроса?

1 Ответ

12 голосов
/ 08 марта 2011

Вы можете сделать это с помощью одного запроса, хотя он немного запутан. Этот запрос будет искать во всех столбцах CHAR и VARCHAR2 в текущей схеме строку '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

Обратите внимание, что это адаптированная версия запроса Лорана Шнайдера для подсчета строк в каждой таблице с помощью одного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...