Hola guardianglorioso:
Para obtener la información que necesitas deberás consultar tres tablas de catálogos:
ALL_CONSTRAINTS: Almacena todas las restricciones de la BD, en tu caso como lo que quieres revisar son las restricciones tipo llave foránea deberás especificar R como constraint_type (Puedes ver más informacíon acerca de esta tabla y los tipos de constraint que almacena
Aquí. ALL_CONS_COLUMNS: almacena la información de las columnas que están involucradas en la restricción. existe una referencia doble con la tabla ALL_CONSTRAINTS. una está dada por el campo constraint_name y la otra por el campo r_constraint_name. Más información
Aquí ALL_TAB_COLUMNS: contiene la definición, tipo de dato, longitud, precisión, etc. para cada columna. Más información
Aquí.
De tal manera que si tuvieras una tabla EMPLEADOS que tiene una restricción con la tabla ESTADOS_CIVILES, en su campo idEstadoCivil podrías hacer algo como esto:
Código SQL:
Ver originalSELECT
t1.constraint_name AS CONSTRAINT,
t2.TABLE_NAME AS TablaOrigen,
t2.column_name AS CampoOrigen,
t3.TABLE_NAME AS TablaReferencia,
t2.column_name AS CampoReferencia
FROM all_constraints t1
INNER JOIN all_cons_columns t2
ON t2.constraint_name = t1.constraint_name AND t2.owner = t1.owner
INNER JOIN all_cons_columns t3
ON T3.constraint_name = t1.r_constraint_name AND t3.owner = t1.owner
WHERE
t1.constraint_type = 'R' AND
t2.POSITION = t3.POSITION AND
t1.TABLE_NAME LIKE 'EMPLEADOS';
Esto te regresaría algo esto:
Código:
Constraint|TablaOrigen|CampoOrigen|TablaReferencia|CampoReferencia
-----------------------------------------------------------------------------------------------------
EMP_EDO_CIVIL_FK|EMPLEADOS|idEstadoCivil|ESTADOS_CIVILES|idEstadoCivil
Lo único que tienes que agregar a la consulta sería la tabla ALL_TAB_COLUMNS para obtener el tipo de cada uno de los campos. Intenta hacerlo y si tienes problemas lo comentas en el foro.
Saludos
Leo.