sábado, 14 de noviembre de 2009


Obtener las Constraints de BD de Oracle


Para sabes que llaves foráneas tenemos en nuestra Base de Datos , podemos usar el comando desc para ver la tabla ALL_CONSTRAINTS.

desc all_constraints;

Lo que nos dará algo como esto en el Script Output:

Name Null Type
------------------------------ -------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG()
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
DEFERRABLE VARCHAR2(14)
DEFERRED VARCHAR2(9)
VALIDATED VARCHAR2(13)
GENERATED VARCHAR2(14)
BAD VARCHAR2(3)
RELY VARCHAR2(4)
LAST_CHANGE DATE
INDEX_OWNER VARCHAR2(30)
INDEX_NAME VARCHAR2(30)
INVALID VARCHAR2(7)
VIEW_RELATED VARCHAR2(14)

20 rows selected

Asi que para ver el contenido de la tabla solo tenemos que hacer:

Select
owner,
constraint_name,
constraint_type,
table_name,
r_owner,
r_constraint_name
From
all_constraints ;

Para que nos regrese todas las constraints de la BD.

Esto nos sirve cuando tenemos un error de llaves foraneas del tipo :

ORA-02291: integrity constraint (DUMMYDB.SYS_C0012345) violated - parent key not found

Para saver cual es la tabla con filas faltantes o datos erroneos que nos marca el error , solo tenemos que hacer:

Select
owner,
constraint_name,
constraint_type,
table_name,
r_owner,
r_constraint_name
From
all_constraints
Where
constraint_name='SYS_C0012345';

Y nos dirá el nombre de la tabla con el problema en la columna r_constraint_name .



Fuente: