All pastes #989496 Raw Edit

Someone

public text v1 · immutable
#989496 ·published 2008-04-19 12:38 UTC
rendered paste body
create or replace function search_in_table(
            owner varchar2,
            table_name varchar2,
            search_string varchar2)
            return varchar2 is
            stmt varchar2(32700);
            col varchar2(32700);
begin
            stmt := 'select ';
            for c in (
                        select column_name
                        from all_tab_columns
                        where all_tab_columns.table_name=search_in_table.table_name
                                    and all_tab_columns.owner=search_in_table.owner
                                    and data_type like '%CHAR%' )
            loop
                        stmt := stmt || 'max(case when "' || c.column_name ||'" REGEXP_LIKE(''' || c.column_name || ''',"' || 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;


and when I call the above function using the below code :

select table_name,cols from (
            select rownum,
            table_name,
            search_in_table('SCOTT',table_name,'[[:digit:]]') cols
            from all_tables where owner='SCOTT')
            where cols is not null;



the follwing error comes :

search_in_table('SCOTT',table_name,'[[:digit:]]') cols
            *
ERROR at line 4:
ORA-00920: invalid relational operator
ORA-06512: at "SYS.SEARCH_IN_TABLE", line 20