sql >> Base de Datos >  >> RDS >> Oracle

Texto de búsqueda de Oracle de vistas

Esto se vuelve más fácil en 12c, donde puedes usar

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

Esto supone que la cadena de texto que está buscando está en los primeros 4000 caracteres. También puede hacer que el informe incluya cualquier vista donde text_length es> 4000 junto con una advertencia.

En versiones anteriores (o para evitar la restricción de 4000 caracteres), podría intentar un bucle 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 implícitamente convierte el SQL LONG valor a una cadena PL/SQL de 32K.

(En mis pruebas en 12.2.0.1.0, esto falló con ORA-06502: PL/SQL: numeric or value error en el select declaración cuando mi cursor incluía SYS.DBA_SCHEDULER_RUNNING_JOBS o SYS."_user_stat" , a pesar de que otras vistas con texto más largo se manejaron con éxito y no estoy seguro de por qué. Puede haber algún problema con esto que no veo).