This will workCREATE OR REPLACE function search_in_table(owner varchar2,table_name varchar2,search_string varchar2)return varchar2 isstmt varchar2(32767);col varchar2(32767);beginstmt := 'select ';for c in (select column_namefrom all_tab_columnswhere all_tab_columns.table_name=search_in_table.table_nameand all_tab_columns.owner=search_in_table.ownerand data_type like '%CHAR%' )loopstmt := stmt || 'max(case when "' || c.column_name ||'" LIKE ''' || search_string || ''' then ''' || c.column_name|| ' ''' || ' else null end) || ';end loop;stmt:= stmt||'nvl2(count(*),null,null) from "'||owner||'"."'||table_name||'"';execute immediate stmt into col;return col;end;/select table_name,cols from (select rownum,table_name,search_in_table('SCOTT',table_name,'digit') colsfrom all_tables where owner='SCOTT')where cols is not null;