Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Construir una query para obtener FK

Estas en el tema de Construir una query para obtener FK en el foro de Oracle en Foros del Web. Buenas gente, Me gustaria que me indicaran como poder hacer la siguiente consulta, o mas bien que tablas poder consultar para hacerlas. Resulta que me ...
  #1 (permalink)  
Antiguo 31/01/2011, 03:53
 
Fecha de Ingreso: agosto-2006
Mensajes: 174
Antigüedad: 17 años, 8 meses
Puntos: 2
Construir una query para obtener FK

Buenas gente,

Me gustaria que me indicaran como poder hacer la siguiente consulta, o mas bien que tablas poder consultar para hacerlas. Resulta que me he dado cuenta de que hay FK en mi base de datos cuyos campos, el referenciado y el referido, tienen tipos de datos diferentes (pej: Campo_tabla_1 varchar2(10) y campo_tabla_2 es varchar2(10)) lo que esto obliga a Oracle a hacer una pequeña conversion.

Asi que la consulta que m egustaria construir para ir a tiro hecho y no estar mirando tabla por tabla, es una consulta que me indique dicha informacion. Es decir que me indique la informacion como la que sigue:

Constraint : FK_SOL_CURSOS
On Table : CURSOS_ICFEM.SOL_CURSOS
Columns : SUBCONCEPTO VARCHAR2(10)
Referring to Constraint : CURSOS_ICFEM.PK_CCF_SUBCONCEPTOS
On Table : CCF_SUBCONCEPTOS
Columns : CODIGO VARCHAR2(8)

Muchas gracias
  #2 (permalink)  
Antiguo 31/01/2011, 09:38
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Construir una query para obtener FK

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 original
  1. SELECT
  2. t1.constraint_name AS CONSTRAINT,
  3. t2.TABLE_NAME AS TablaOrigen,
  4. t2.column_name AS CampoOrigen,
  5. t3.TABLE_NAME AS TablaReferencia,
  6. t2.column_name AS CampoReferencia
  7. FROM all_constraints t1
  8. INNER JOIN all_cons_columns t2
  9. ON t2.constraint_name = t1.constraint_name AND t2.owner = t1.owner
  10. INNER JOIN all_cons_columns t3
  11. ON T3.constraint_name = t1.r_constraint_name AND t3.owner = t1.owner
  12. WHERE
  13. t1.constraint_type = 'R' AND
  14. t2.POSITION = t3.POSITION AND
  15. 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.
  #3 (permalink)  
Antiguo 01/02/2011, 03:00
 
Fecha de Ingreso: agosto-2006
Mensajes: 174
Antigüedad: 17 años, 8 meses
Puntos: 2
Respuesta: Construir una query para obtener FK

Muchas gracias.

Mas o menos esa consulta es la que estaba construyendo, lo unico que me faltaron un par de uniones y por eso me salian mas de la cuenta. Ahora lo que me falta y no se como meterlo es como dije en la pregunta sacar el tipo de dato y la longitud tanto del campo referenciado como el campo "referenciador", de modo que solo me saque aquellas filas que o bien el tipo de datos entre los campos sea diferente o que sean iguales pero con diferente tamaño.

No se si me has entendido. Hay que añadir dos tablas mas, las que hacen referencia a los tipos de datos y las longuitudes de todos los campos, pero ahi ya se me descuadra la consulta.

Muchas gracias de nuevo

Etiquetas: query
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:49.