Jak mogę znaleźć tabele odwołujące się do danej tabeli w Oracle SQL Developer?

In Oracle SQL Developer , jeśli przeglądam informacje w tabeli, mogę zobaczyć ograniczenia, które pozwalają mi zobaczyć klucze obce (a więc do których tabel odnosi się ta tabela), i mogę zobaczyć zależności, aby zobaczyć, jakie pakiety i takie odniesienia do tabeli. Ale nie jestem pewien, jak znaleźć, które tabele odnoszą się do tabeli.

Na przykład, powiedzmy, że patrzę na emp tabelę. Istnieje inna tabela emp_dept, która pokazuje, którzy pracownicy pracują w jakich działach, który odwołuje się do tabeli emp poprzez emp_id, Klucz główny tabeli emp. Czy istnieje sposób (przez jakiś element interfejsu użytkownika w programie, a nie przez SQL), aby dowiedzieć się, że tabela emp_dept odwołuje się do tabeli emp, bez mojej wiedzy, że tabela emp_dept istnieje?

Author: Rudd Zwolinski, 2009-07-17

7 answers

Nie. Nie ma takiej opcji dostępnej w Oracle SQL Developer.

Musisz wykonać zapytanie ręcznie lub użyć innego narzędzia (na przykład programista PLSQL ma taką opcję). Poniższy SQL jest używany przez programistę PLSQL:

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

Gdzie r_owner jest schematem, a {[2] } tabelą, dla której szukasz referencji. W nazwach rozróżnia się wielkość liter


Bądź ostrożny, ponieważ na karcie Raporty Oracle SQL Developer znajduje się opcja " Wszystkie tables/ Dependencies " pochodzi z ALL_DEPENDENCIES , która odnosi się do " zależności pomiędzy procedurami, pakietami, funkcjami, ciałami pakietów i wyzwalaczami dostępnymi dla bieżącego użytkownika, w tym zależności od widoków utworzonych bez żadnych linków do bazy danych.". Zatem ten raport nie ma żadnej wartości dla Twojego pytania.

 208
Author: FerranB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-20 10:41:37

Aby dodać to do SQL Developer jako rozszerzenie wykonaj następujące czynności:

  1. zapisz poniższy kod do pliku xml (np.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. Dodaj rozszerzenie do SQL Developer:

    • Narzędzia > Preferencje
    • Baza Danych > Rozszerzenia Zdefiniowane Przez Użytkownika
    • Kliknij przycisk "Dodaj wiersz"
    • w polu Type wybierz "EDITOR", lokalizacja jest miejscem, w którym zapisałeś plik xml powyżej
    • Kliknij "Ok", a następnie uruchom ponownie SQL Developer
  2. Nawigacja do dowolnej tabeli i powinieneś teraz zobaczyć dodatkową kartę obok SQL, oznaczoną referencjami FK, która wyświetla nowe informacje FK.

  3. Odniesienie

 95
Author: junaling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-11 10:43:56

Zamień [swoją tabelę] na emp w zapytaniu poniżej

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]');
 33
Author: lexu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-17 15:00:45

Możesz to sprawdzić z widoku 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"
    );
 8
Author: Adam Paynter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-29 17:43:38

SQL Developer 4.1, wydany w maju 2015 roku, dodał kartę Model, która pokazuje klucze obce tabeli, które odnoszą się do tabeli w formacie diagramu relacji encji.

 7
Author: Mark A. Fitzgerald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-10 18:14:04

A może coś takiego:

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';
 4
Author: DCookie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-17 15:12:04
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; 
 3
Author: Abu Turab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-01 12:47:53