Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Suchtext von Ansichten

Dies wird in 12c einfacher, wo Sie

verwenden können
select *
from   all_views v
where  lower(v.text_vc) like '%abc%';

Dies setzt voraus, dass die gesuchte Textzeichenfolge in den ersten 4000 Zeichen enthalten ist. Sie können den Bericht auch alle Ansichten enthalten lassen, in denen text_length ist> 4000 zusammen mit einer Warnung.

In früheren Versionen (oder um die 4000-Zeichen-Beschränkung zu umgehen) könnten Sie eine PL/SQL-Schleife wie diese versuchen:

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 konvertiert implizit den SQL LONG -Wert in eine 32-KB-PL/SQL-Zeichenfolge.

(In meinen Tests in 12.2.0.1.0 schlug dies mit ORA-06502: PL/SQL: numeric or value error fehl beim select Anweisung, wenn mein Cursor SYS.DBA_SCHEDULER_RUNNING_JOBS enthielt oder SYS."_user_stat" , obwohl andere Ansichten mit längerem Text erfolgreich verarbeitet wurden und ich nicht sicher bin, warum. Es kann ein Problem damit geben, das ich nicht sehe.)