Oracle
 sql >> Database >  >> RDS >> Oracle

Testo di ricerca Oracle delle viste

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