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
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario