Cela devient plus facile dans 12c, où vous pouvez utiliser
select *
from all_views v
where lower(v.text_vc) like '%abc%';
Cela suppose que la chaîne de texte que vous recherchez se trouve dans les 4000 premiers caractères. Vous pouvez également faire en sorte que le rapport inclue n'importe quelle vue où text_length
est> 4000 avec un avertissement.
Dans les versions antérieures (ou pour éviter la restriction de 4000 caractères), vous pouvez essayer une boucle PL/SQL comme celle-ci :
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 convertit implicitement le SQL LONG
valeur en une chaîne PL/SQL de 32 Ko.
(Dans mes tests en 12.2.0.1.0, cela a échoué avec ORA-06502: PL/SQL: numeric or value error
au select
déclaration lorsque mon curseur incluait SYS.DBA_SCHEDULER_RUNNING_JOBS
ou SYS."_user_stat"
, même si d'autres vues avec du texte plus long ont été gérées avec succès, et je ne sais pas pourquoi. Il peut y avoir un problème avec cela que je ne vois pas.)