Detta blir enklare i 12c, där du kan använda
select *
from all_views v
where lower(v.text_vc) like '%abc%';
Detta förutsätter att textsträngen du letar efter innehåller de första 4000 tecknen. Du kan också låta rapporten inkludera valfri vy där text_length
är> 4000 tillsammans med en varning.
I tidigare versioner (eller för att undvika begränsningen på 4 000 tecken) kan du prova en PL/SQL-loop så här:
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 konverterar implicit SQL LONG
värde till en 32K PL/SQL-sträng.
(I mina tester i 12.2.0.1.0 misslyckades detta med ORA-06502: PL/SQL: numeric or value error
vid select
uttalande när min markör inkluderade SYS.DBA_SCHEDULER_RUNNING_JOBS
eller SYS."_user_stat"
, även om andra vyer med längre text hanterades framgångsrikt, och jag är inte säker på varför. Det kan vara något problem med detta som jag inte ser.)