Това става по-лесно в 12c, където можете да използвате
select *
from all_views v
where lower(v.text_vc) like '%abc%';
Това предполага, че текстовият низ, който търсите, е в първите 4000 знака. Можете също така да включите отчета всеки изглед, където text_length
е> 4000 заедно с предупреждение.
В по-стари версии (или за да избегнете ограничението от 4000 знака), можете да опитате PL/SQL цикъл като този:
begin
dbms_output.put_line('Owner View name');
dbms_output.put_line('------------------------------ -------------------------------');
for r in (
select v.owner, v.view_name, v.text
from all_views v
where v.owner <> 'SYS'
)
loop
if lower(r.text) like '%abc%' then
dbms_output.put_line(rpad(r.owner,31) || r.view_name);
end if;
end loop;
end;
PL/SQL неявно преобразува SQL LONG
стойност към 32K PL/SQL низ.
(В моите тестове в 12.2.0.1.0 това се провали с ORA-06502: PL/SQL: numeric or value error
при select
израз, когато курсорът ми включваше SYS.DBA_SCHEDULER_RUNNING_JOBS
или SYS."_user_stat"
, въпреки че други изгледи с по-дълъг текст бяха обработени успешно и не съм сигурен защо. Може да има някакъв проблем с това, което не виждам.)