[sql] Oracle SQL Developer에서 주어진 테이블을 참조하는 테이블을 어떻게 찾을 수 있습니까?

에서 오라클 SQL 개발자 나는 테이블에 대한 정보를 볼 수있어 경우에, 나는 나 (테이블이이 테이블에서 참조하여 등) 외래 키를 볼 수 있도록 제약을 볼 수 있습니다, 내가 무엇을 볼 수있는 종속성을 볼 수 있습니다 패키지 및 이러한 참조 표. 그러나 테이블을 참조하는 테이블을 찾는 방법을 잘 모르겠습니다.

예를 들어 emp테이블을 보고 있다고 가정 해 봅시다. 테이블 의 기본 키 인를 통해 테이블을 emp_dept참조하는 부서에서 어떤 직원이 어떤 부서에서 일하는지 캡처하는 다른 테이블 이 있습니다. 테이블이 존재 한다는 것을 알 필요없이 테이블 이 테이블을 참조 한다는 것을 알 수있는 방법이 있습니까 (프로그램이 아닌 UI 요소를 통해) .empemp_idempemp_deptempemp_dept



답변

아니요. Oracle SQL Developer에서 이러한 옵션을 사용할 수 없습니다.

직접 쿼리를 실행하거나 다른 도구를 사용해야합니다 (예 : PLSQL Developer 에 이러한 옵션이 있음). 다음 SQL은 PLSQL Developer가 사용하는 SQL입니다.

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

r_owner스키마는 어디에 있고 r_table_name참조하려는 테이블입니다. 이름은 대소 문자를 구분합니다


Oracle SQL Developer의 보고서 탭에는 “모든 테이블 / 종속성”옵션이 있으며 이는 ALL_DEPENDENCIES의 “모든 테이블 / 종속성”옵션입니다. “종속성 을 포함하여 현재 사용자가 액세스 할 수있는 프로 시저, 패키지, 함수, 패키지 본문 및 트리거 간의 종속성 을 나타냅니다. 데이터베이스 링크없이 생성 된보기 . 그런 다음이 보고서에는 질문에 대한 가치가 없습니다.


답변

이것을 SQL Developer에 확장으로 추가하려면 다음을 수행하십시오.

  1. 아래 코드를 xml 파일 (예 : 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. SQL Developer에 확장을 추가하십시오.

    • 도구> 환경 설정
    • 데이터베이스> 사용자 정의 확장
    • “행 추가”버튼을 클릭하십시오
    • 유형에서 “편집자”를 선택하십시오. 위치는 위의 xml 파일을 저장 한 위치입니다.
    • “확인”을 클릭 한 다음 SQL 개발자를 다시 시작하십시오.
  2. 테이블로 이동하면 이제 SQL F 옆에 FK 참조라고 표시된 추가 탭이 표시되어 새 FK 정보가 표시됩니다.

  3. 참고


답변

아래 쿼리에서 [Your TABLE]을 emp 로 바꿉니다.

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]');


답변

당신은 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"
    );


답변

2015 년 5 월에 릴리스 된 SQL Developer 4.1에는 테이블을 참조하는 테이블 외래 키를 엔터티 관계 다이어그램 형식으로 표시하는 모델 탭이 추가되었습니다.


답변

이런 식으로 어떻습니까 :

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';


답변

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;