ver una tablas tabla saber relaciones relacionadas relacion que primarias llaves hijas foraneas estan entre consultar como sql oracle foreign-keys oracle-sqldeveloper

sql - una - ver relacion entre tablas oracle



¿Cómo puedo encontrar qué tablas hacen referencia a una tabla determinada en Oracle SQL Developer? (7)

En Oracle SQL Developer , si estoy viendo la información en una tabla, puedo ver las restricciones, lo que me permite ver las claves externas (y por lo tanto las tablas a las que hace referencia esta tabla), y puedo ver las dependencias para ver qué paquetes y tal referencia la tabla. Pero no estoy seguro de cómo encontrar qué tablas hacen referencia a la tabla.

Por ejemplo, digamos que estoy mirando la tabla emp . Hay otra tabla emp_dept que captura qué empleados trabajan en qué departamentos, que hace referencia a la tabla emp través de emp_id , la clave principal de la tabla emp . ¿Hay alguna manera (a través de algún elemento de UI en el programa, no mediante SQL) de encontrar que la tabla emp_dept referencia a la tabla emp , sin que yo tenga que saber que existe la tabla emp_dept ?


No. No existe tal opción disponible de Oracle SQL Developer.

Tienes que ejecutar una consulta a mano o usar otra herramienta (por ejemplo, PLSQL Developer tiene esa opción). El siguiente SQL es el usado por PLSQL Developer:

select table_name, constraint_name, status, owner from all_constraints where r_owner = :r_owner and constraint_type = ''R'' and r_constraint_name in ( select constraint_name from all_constraints where constraint_type in (''P'', ''U'') and table_name = :r_table_name and owner = :r_owner ) order by table_name, constraint_name

Donde r_owner es el esquema, y r_table_name es la tabla para la que busca referencias. Los nombres son sensibles a las mayúsculas

Tenga cuidado porque en la pestaña de informes de Oracle SQL Developer existe la opción "Todas las tablas / Dependencias" de ALL_DEPENDENCIES que hace referencia a " dependencias entre procedimientos, paquetes, funciones, cuerpos de paquetes y desencadenadores accesibles para el usuario actual, incluidas las dependencias en vistas creadas sin ningún enlace de base de datos. " . Entonces, este informe no tiene ningún valor para su pregunta.


Para agregar esto a SQL Developer como una extensión, haga lo siguiente:

  1. Guarde el siguiente código en un archivo xml (por ejemplo, fk_ref.xml):

<items> <item type="editor" node="TableNode" vertical="true"> <title><![CDATA[FK References]]></title> <query> <sql> <![CDATA[select a.owner, a.table_name, a.constraint_name, a.status from all_constraints a where a.constraint_type = ''R'' and exists( select 1 from all_constraints where constraint_name=a.r_constraint_name and constraint_type in (''P'', ''U'') and table_name = :OBJECT_NAME and owner = :OBJECT_OWNER) order by table_name, constraint_name]]> </sql> </query> </item> </items>

  1. Agregue la extensión a SQL Developer:

    • Herramientas> Preferencias
    • Base de datos> Extensiones definidas por el usuario
    • Haga clic en el botón "Agregar fila"
    • En Tipo, elija "EDITOR", Ubicación donde guardó el archivo xml anterior.
    • Haga clic en "Ok" y luego reinicie SQL Developer
  2. Navegue a cualquier tabla y ahora debería ver una pestaña adicional al lado de SQL uno, etiquetada Referencias FK, que muestra la nueva información FK.

  3. Referencia


Puede consultar esto desde la vista ALL_CONSTRAINTS :

SELECT table_name FROM ALL_CONSTRAINTS WHERE constraint_type = ''R'' -- "Referential integrity" AND r_constraint_name IN ( SELECT constraint_name FROM ALL_CONSTRAINTS WHERE table_name = ''EMP'' AND constraint_type IN (''U'', ''P'') -- "Unique" or "Primary key" );


Qué tal algo como esto:

SELECT c.constraint_name, c.constraint_type, c2.constraint_name, c2.constraint_type, c2.table_name FROM dba_constraints c JOIN dba_constraints c2 ON (c.r_constraint_name = c2.constraint_name) WHERE c.table_name = <TABLE_OF_INTEREST> AND c.constraint_TYPE = ''R'';


Reemplace [Su TABLA] con emp en la siguiente consulta

select owner,constraint_name,constraint_type,table_name,r_owner,r_constraint_name from all_constraints where constraint_type=''R'' and r_constraint_name in (select constraint_name from all_constraints where constraint_type in (''P'',''U'') and table_name=''[YOUR TABLE]'');


SQL Developer 4.1, lanzado en mayo de 2015, agregó una pestaña Modelo que muestra las claves externas de la tabla que hacen referencia a su tabla en un formato de diagrama de relación de entidad.


SELECT DISTINCT table_name, constraint_name, column_name, r_table_name, position, constraint_type FROM (SELECT uc.table_name, uc.constraint_name, cols.column_name, (SELECT table_name FROM user_constraints WHERE constraint_name = uc.r_constraint_name) r_table_name, (SELECT column_name FROM user_cons_columns WHERE constraint_name = uc.r_constraint_name AND position = cols.position) r_column_name, cols.position, uc.constraint_type FROM user_constraints uc inner join user_cons_columns cols ON uc.constraint_name = cols.constraint_name WHERE constraint_type != ''C'') START WITH table_name = ''&&tableName'' AND column_name = ''&&columnName'' CONNECT BY NOCYCLE PRIOR table_name = r_table_name AND PRIOR column_name = r_column_name;