lundi 11 juillet 2011

LONG et LOB : Recherche de texte dans le corps des vues

La recherche d'une chaine de caractère dans le corps des vues peut être utile par exemple pour déterminer toutes les vues qui utilisent un db_link.
 
Or, le corps de la vue étant codé en long, il est impossible de l'afficher avec un select. On passe donc par une conversion en LOB dans une table intermédiaire.


Exemple :

SQL> CREATE FORCE VIEW v_test AS SELECT * FROM all_users@dblink;

Warning: View created with compilation errors.

SQL> SELECT * FROM user_views WHERE text LIKE '%@%';
SELECT * FROM user_views WHERE text LIKE '%@%'
                               *
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got LONG

SQL> CREATE TABLE toto AS SELECT view_name, TO_LOB(text) AS text FROM user_views;

Table created.

SQL> SELECT * FROM toto WHERE text LIKE '%@%';


VIEW_NAME                      TEXT
------------------------------ -------------------------------
V_TEST                         SELECT * FROM all_users@dblink
 
On parvient ainsi à identifier une vue ayant un db_link dans sa définition.

Aucun commentaire:

Enregistrer un commentaire