Staje się to łatwiejsze w 12c, gdzie możesz korzystać
select *
from all_views v
where lower(v.text_vc) like '%abc%';
Zakłada się, że szukany ciąg tekstowy znajduje się w pierwszych 4000 znaków. Możesz również chcieć, aby raport zawierał dowolny widok, w którym text_length
wynosi> 4000 wraz z ostrzeżeniem.
We wcześniejszych wersjach (lub aby uniknąć ograniczenia 4000 znaków), możesz wypróbować pętlę PL/SQL w następujący sposób:
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 niejawnie konwertuje kod SQL LONG
wartość do ciągu 32K PL/SQL.
(W moich testach w 12.2.0.1.0 nie powiodło się to z ORA-06502: PL/SQL: numeric or value error
w select
oświadczenie, gdy mój kursor zawierał SYS.DBA_SCHEDULER_RUNNING_JOBS
lub SYS."_user_stat"
, mimo że inne widoki z dłuższym tekstem były obsługiwane pomyślnie i nie wiem dlaczego. Może występować jakiś problem, którego nie widzę).