Questo diventa più facile in 12c, dove puoi usare
select *
from all_views v
where lower(v.text_vc) like '%abc%';
Ciò presuppone che la stringa di testo che stai cercando sia nei primi 4000 caratteri. Potresti anche fare in modo che il rapporto includa qualsiasi vista in cui text_length
è> 4000 insieme a un avviso.
Nelle versioni precedenti (o per evitare la restrizione di 4000 caratteri), potresti provare un ciclo PL/SQL come questo:
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 converte implicitamente l'SQL LONG
valore in una stringa PL/SQL di 32.000.
(Nei miei test in 12.2.0.1.0, questo non è riuscito con ORA-06502: PL/SQL: numeric or value error
alla select
istruzione quando il mio cursore includeva SYS.DBA_SCHEDULER_RUNNING_JOBS
o SYS."_user_stat"
, anche se altre viste con testo più lungo sono state gestite correttamente e non sono sicuro del perché. Potrebbe esserci qualche problema con questo che non vedo.)