Как найти таблицу по содержимому ?

dbstalker, 12 января

Несколько раз приходилось искать в незнакомой схеме таблицу по содержимому. Для этого использовался скрип, найденный на sql.ru. Автору ( andrey_anonymous ) огромная благодарность. К вашим услугам этот скрипт:

declare
  l_pattern varchar2(100) := '%искомая_подстрока%';
  cursor cf is select table_name,column_name from user_tab_columns where data_type = 'VARCHAR2' order by table_name;

  t_str varchar2(2000) := 'select count(*) from dual where exists( select null from ';
  l_str varchar2(2000); 
  l_where_clause varchar2(2000) := ' where 1=0';
  l_last_table varchar2(100) := '';
  l_cnt number := 0;
  
  procedure query_ (i_txt varchar2) is
    l_txt varchar2(4000) := i_txt;
    l_ln number := length(l_txt);
    l_pieces number := ceil(l_ln/250);
  begin
   for i in 1..l_pieces loop
      dbms_output.put_line(substr(i_txt, 1+250*(i-1),least(250,l_ln-250*(i-1))));
    end loop;
    dbms_output.new_line;
  end;

begin
  for i in cf loop
    if l_last_table <> i.table_name then
    --  dbms_output.put_line(l_str||l_where_clause);
      execute immediate l_str || l_where_clause ||')' into l_cnt;
      if l_cnt > 0 then 
        query_ ('select * from ' || l_last_table || l_where_clause || ';');
      end if;
      l_cnt := 0;
      l_where_clause := ' where 1=0';
    end if;
    l_last_table := i.table_name;
    l_str := t_str || i.table_name;
    l_where_clause := l_where_clause || ' OR ' || i.column_name || ' like ''' ||l_pattern||'''';
   end loop;
  execute immediate l_str || l_where_clause ||')' into l_cnt;
  if l_cnt > 0 then 
    query_ ('select * from ' || l_last_table || l_where_clause || ';');
  end if;
end;

Результат работы скрипта - перечень запросов, выполнив которые, вы получите поля с искомых содержимым.

2 комментария

Прокоментировать

er
12 января 2010 г. в 14:37

t_str varchar2(2000) := 'select count(*) from dual where exists( select null from ';
интересная строчка, что же имел ввиду афтор ?

dbstalker
12 января 2010 г. в 15:10

смотрите дальше по тексту :)

 

Новый комментарий

Я не спамер: введите суму 0+9



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Требуется бухгалтер
21 августа, 1 ответа