vendredi 13 mars 2009

Spatial : Vérifier la présence des métadonnées et index

Lorsqu'on manipule des données spatiales, des métadonnées doivent être définies et insérées dans la table "USER_SDO_GEOM_METADATA".

Pour me simplifier la vie, j'ai conçu un requête qui me permet de vérifier la présence de ces métadonnées pour chaque colonne de type spatiale. Si elle est absente, la requête ci-dessous retourne un enregistrement :

Select 'TABLE' Type_Obj,utc.TABLE_NAME, utc.COLUMN_NAME
from user_tab_columns utc,
user_tables ut
where utc.data_type = 'SDO_GEOMETRY'
and ut.table_name = utc.table_name
and not exists
(
select 'x'
from user_sdo_geom_metadata usgm
where usgm.table_name = utc.table_name
and usgm.column_name = utc.column_name
)
Union
Select 'VUE',utc.TABLE_NAME, utc.COLUMN_NAME
from user_tab_columns utc,
user_views ut
where utc.data_type = 'SDO_GEOMETRY'
and ut.view_name = utc.table_name
and not exists
(
select 'x'
from user_sdo_geom_metadata usgm
where usgm.table_name = utc.table_name
and usgm.column_name = utc.column_name
)
order by 1,2,3;



Dans la même ordre d'idée, un index de type "DOMAIN" est nécessaire pour accéder aux données spatiales d'une colonne. La requête suivante me permet de vérifier la présence d'un index sur toutes les colonnes de type spatiale pour un schéma donné :

Select *
from user_tab_columns utc,
user_tables ut
where utc.data_type = 'SDO_GEOMETRY'
and ut.table_name = utc.table_name
and not exists
(
select 'x'
from user_ind_columns uic, user_indexes ui
where uic.table_name = utc.table_name
and uic.column_name = utc.column_name
and uic.table_name = ui.table_name
and uic.index_name = ui.index_name
and ui.index_type = 'DOMAIN'
)
order by utc.table_name, utc.column_name;



Ce n'est pas des requêtes très complexes mais elles m'évitent bien des problèmes.

Aucun commentaire:

Publier un commentaire