вторник, 30 августа 2011 г.

Поиск во всех полях схемы.

Скрипт представленный ниже позволяет производить поиск по всем полям всех таблиц схемы schema_name строки part_of_string.

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

set serveroutput on;

DECLARE 
schema_name varchar2(30) := 'hr';  -- имя схемы
part_of_string varchar2(30) := 'grant'; -- искомая строка
cnt_in_tab number := 0;
search VARCHAR2(250);

BEGIN 
FOR t IN 
(
select 
COL.OWNER as owr
,COL.TABLE_NAME as tbn
,COL.COLUMN_NAME as cln
from all_tab_columns col                   
where COL.OWNER = upper(schema_name)
) 

LOOP 
search := 'SELECT COUNT(*) FROM ' || t.owr || '.'  || t.tbn || ' WHERE upper(to_char(' || t.cln || ')) LIKE upper(''%'|| part_of_string ||'%'')' ;
EXECUTE IMMEDIATE search   INTO cnt_in_tab;
IF cnt_in_tab > 0 THEN dbms_output.put_line( 'TABLE: ' ||t.tbn ||'.'||t.cln||'; FOUND: '||cnt_in_tab ); 
END IF; 
END LOOP;

END;