我正在尝试使用String搜索所有表,但它似乎不适用于BLOB列。我从一个论坛得到了这个程序。它正在搜索字符串但不在BLOB中。 你能帮帮我吗?
create or replace procedure find_string( p_str in varchar2 )
authid current_user
as
l_query long;
l_case long;
l_runquery boolean;
l_tname varchar2(30);
l_cname varchar2(30);
l_x number;
begin
dbms_application_info.set_client_info( '%' || upper(p_str) || '%' );
for x in (select * from user_tables )
loop
l_query := 'select ''' || x.table_name || ''', $$
from ' || x.table_name || '
where rownum = 1 and ( 1=0 ';
l_case := 'case ';
l_runquery := FALSE;
for y in ( select *
from user_tab_columns
where table_name = x.table_name
)
loop
l_runquery := TRUE;
l_query := l_query || ' or upper(' || y.column_name ||
') like userenv(''client_info'') ';
l_case := l_case || ' when upper(' || y.column_name ||
') like userenv(''client_info'') then ''' ||
y.column_name || '''';
end loop;
if ( l_runquery )
then
l_case := l_case || ' else NULL end';
l_query := replace( l_query, '$$', l_case ) || ')';
begin
execute immediate l_query into l_tname, l_cname;
dbms_output.put_line
( 'Found in ' || l_tname || '.' || l_cname );
exception
when no_data_found then
/*select 0 into l_x from dual;*/
dbms_output.put( '.');
end;
end if;
end loop;
end;
非常感谢!
答案 0 :(得分:1)
您无法使用普通的SQL字符串操作在BLOB列中搜索字符串。您需要使用dbms_lob
包来实现目标。
有关如何完成的示例,请参阅this链接。 Google上也有很多可以为您提供进一步指导的示例。