domingo, 8 de mayo de 2011

Información de las constraints de una tabla. Oracle.

Para conocer mediante una consulta SQL algunos datos de las restricciones  (constraintsutilizando vistas del diccionario de datos de Oracle conociendo solo el nombre de la tabla podemos hacer la siguiente SELECT, en la que nos indica el propietario, nombre de la tabla, nombre de la columna que tiene la restricción, nombre de la constraint, tipo de constraint, la condición que deben cumplir las constraints tipo CHECK y el estado.

Un ejemplo mostrando información de las constraints donde la tabla se llama EMP.

select
         owner,
         table_name,
         column_name,
         constraint_name,
         constraint_type,
         search_condition,
         status
from
         all_constraints
  join all_cons_columns
  using(owner,table_name,constraint_name)
where
         table_name='EMP';

Información de las constraints

Owner es el nombre del esquema en el que se encuentra la tabla. Tipo de constraint sobre tabla puede ser: PRIMARY KEY (P), FOREIGN KEY (R), UNIQUE (U), CHECK (C). El nombre de una constraint es único por esquema.



Basándonos en la SELECT anterior, podemos modificar la cláusula WHERE para filtrar por los datos que nos interesan. Recordar que la información está en mayúsculas, así que en las condiciones del WHERE al preguntar por valores, utilizar mayúsculas.


Describir las vistas, para ver qué otra información nos dan y así modificar la SELECT para obtener lo que buscamos. En ALL_CONS_COLUMNS básicamente tenemos la información de qué columnas son las afectadas por la constraint. En ALL_CONSTRAINTS tenemos información sobre su estado (estatus, validate), constraints a las que se hace referencia en caso de una foreign key (r_constraint_name,r_owner), regla de eliminación (delete_rule), índice asociado a la constraint (index_name, index_owner), etc.

Otra alternativa a las vistas ALL_CONSTRAINTS y ALL_CONS_COLUMNS son: USER_CONSTRAINTS y USER_CONS_COLUMNS, en las que la información que nos mostraran se limita a las constraints pertenecientes al usuario con el que nos hemos conectado.


–Web de Oracle sobre la vista ALL_CONSTRAINTS y sobre ALL_CONS_COLUMNS

2 comentarios: