jueves, 25 de marzo de 2010

Consultas a la DBA_VIEWS

Como muchos saben, realizar una consulta a la vista dba_views para buscar un texto en particular que posea una vista no es una tarea sencilla. Esto se debe a que el campo TEXT de la vista es de tipo LONG por lo que no podemos hacer una comparación en la clausula where ya que nos arrojaría el siguiente error:

SQL> select * from dba_views where text like '%PRUEBA%'

ORA-00932: inconsistent datatypes: expected NUMBER got LONG

Para resolver este problema a continuación vamos a ver dos posibles soluciones:

1- La primera es a través de un script con el cual vamos a poder ver las vistas que contengan el texto que necesitemos buscar

BEGIN
FOR r IN (SELECT owner, view_name, text FROM dba_views) LOOP
IF r.text LIKE '%PRUEBA%' THEN
dbms_output.put_line(r.view_name);
END IF;
END LOOP;
END;
/


En este caso con la creación de un cursor podemos realizar la búsqueda que necesitamos del campo TEXT.

2- La segunda alternativa es copiar los datos a una tabla “temporal”, convirtiendo los datos LONG en CLOBs, para esto podemos hacer lo siguiente:

SQL> create table my_dba_views (owner, view_name, text) as select owner, view_name, to_lob(text) from dba_views;

Table created

Ahora podemos realizar la consulta normalmente

SQL> select view_name from my_dba_views where upper(text) like '%PRUEBA%';


Espero les haya servido

Saludos!
Gondalf

No hay comentarios:

Publicar un comentario