To je snazší v 12c, kde můžete použít
select *
from all_views v
where lower(v.text_vc) like '%abc%';
To předpokládá, že hledaný textový řetězec je v prvních 4000 znacích. Můžete také mít přehled obsahovat jakékoli zobrazení, kde je text_length
je> 4000 spolu s varováním.
V dřívějších verzích (nebo abyste se vyhnuli omezení 4000 znaků), můžete zkusit smyčku PL/SQL takto:
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 implicitně převádí SQL LONG
hodnotu na řetězec 32 kB PL/SQL.
(V mých testech v 12.2.0.1.0 to selhalo s ORA-06502: PL/SQL: numeric or value error
na select
příkaz, když můj kurzor obsahoval SYS.DBA_SCHEDULER_RUNNING_JOBS
nebo SYS."_user_stat"
, i když ostatní pohledy s delším textem byly zpracovány úspěšně a nejsem si jistý proč. V tom může být nějaký problém, který nevidím.)