Dette bliver nemmere i 12c, hvor du kan bruge
select *
from all_views v
where lower(v.text_vc) like '%abc%';
Dette forudsætter, at den tekststreng, du leder efter, er i de første 4000 tegn. Du kan også få rapporten til at inkludere enhver visning, hvor text_length
er> 4000 sammen med en advarsel.
I tidligere versioner (eller for at undgå begrænsningen på 4000 tegn), kan du prøve en PL/SQL-løkke som denne:
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 konverterer implicit SQL LONG
værdi til en 32K PL/SQL-streng.
(I mine test i 12.2.0.1.0 mislykkedes dette med ORA-06502: PL/SQL: numeric or value error
ved select
sætning, da min markør inkluderede SYS.DBA_SCHEDULER_RUNNING_JOBS
eller SYS."_user_stat"
, selvom andre visninger med længere tekst blev håndteret med succes, og jeg ved ikke hvorfor. Der kan være et problem med dette, jeg ikke kan se.)