Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Texto de pesquisa do Oracle de visualizações


Isso fica mais fácil em 12c, onde você pode usar
select *
from   all_views v
where  lower(v.text_vc) like '%abc%';

Isso pressupõe que a string de texto que você está procurando esteja nos primeiros 4.000 caracteres. Você também pode fazer com que o relatório inclua qualquer visualização em que text_length é> 4000 junto com um aviso.

Em versões anteriores (ou para evitar a restrição de 4.000 caracteres), você pode tentar um loop PL/SQL como este:
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 o SQL LONG valor para uma string PL/SQL de 32K.

(Nos meus testes em 12.2.0.1.0, isso falhou com ORA-06502: PL/SQL: numeric or value error no select declaração quando meu cursor incluiu SYS.DBA_SCHEDULER_RUNNING_JOBS ou SYS."_user_stat" , mesmo que outras exibições com texto mais longo tenham sido tratadas com sucesso, e não tenho certeza do motivo. Pode haver algum problema com isso que eu não estou vendo.)