Oracle
 sql >> Base de données >  >> RDS >> Oracle

Texte de recherche Oracle des vues

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.)