Dit wordt gemakkelijker in 12c, waar u
. kunt gebruikenselect *
from all_views v
where lower(v.text_vc) like '%abc%';
Hierbij wordt ervan uitgegaan dat de tekstreeks die u zoekt in de eerste 4000 tekens bestaat. U kunt het rapport ook elke weergave laten bevatten waarin text_length
is> 4000 samen met een waarschuwing.
In eerdere versies (of om de beperking van 4000 tekens te vermijden), kunt u een PL/SQL-lus als volgt proberen:
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 converteert impliciet de SQL LONG
waarde naar een 32K PL/SQL-tekenreeks.
(In mijn tests in 12.2.0.1.0 mislukte dit met ORA-06502: PL/SQL: numeric or value error
bij de select
statement toen mijn cursor SYS.DBA_SCHEDULER_RUNNING_JOBS
bevatte of SYS."_user_stat"
, hoewel andere weergaven met langere tekst met succes werden verwerkt, en ik weet niet zeker waarom. Er is mogelijk een probleem dat ik niet zie.)