2010-07-09 5 views
3

제약 조건에 대한 자세한 정보 (예 : 외래 키가 참조하는 테이블)를 포함하는 테이블은 무엇입니까? 'all_cons_columns'테이블, 'all_constraints'테이블에는 매우 도움이되지 않는 제약 조건의 이름 만 들어 있습니다. 현재 dbms_metadata.get_ddl()을 사용하고 있지만 모든 데이터베이스에서 작동하지 않습니다.기본/외래 키 제약 조건에 대한 oracle의 메타 데이터보기

감사합니다.

답변

5

ALL_CONSTRAINTS의 R_CONSTRAINT_NAME 열에는 외래 키에 대한 참조 된 PK/UK 제약 조건의 이름이 들어 있습니다. 그런 다음 해당 제약 조건을 조회하여 참조 테이블의 TABLE_NAME을 얻을 수 있습니다.

ALL_CONS_COLUMNS을 보면 외래 키의 열 POSITION이 주/고유 키의 열 POSITION과 일치합니다.

+0

duh. 그냥 봤어. 감사. – ssr532

3

이 문장은 테이블, 제약 조건 이름 및 외래 키 테이블 이름을 나열합니다. 외래 키를 검색하는 스크립트를 생성하기 위해

select c.table_name,c.constraint_name, --c.r_constraint_name, 
    cc.table_name 
from all_constraints c 
inner join all_constraints cc on c.r_constraint_name = cc.constraint_name 
+0

감사합니다. – ssr532

3

을 다음 쿼리를 사용할 수 있습니다.

SELECT 
    'ALTER TABLE ' || a.table_name || ' ADD CONSTRAINT ' || a.constraint_name 
    || ' FOREIGN KEY (' || a.column_name || ') REFERENCES ' || jcol.table_name 
    || ' (' || jcol.column_name || ');' as commandforeign 
FROM 
    (SELECT 
     uc.table_name, uc.constraint_name, uc.r_constraint_name, col.column_name 
    FROM 
     USER_CONSTRAINTS uc, USER_CONS_COLUMNS col 
    WHERE 
     uc.constraint_type='R' and uc.constraint_name=col.constraint_name) a 
INNER JOIN 
    USER_CONS_COLUMNS jcol 
ON 
    a.r_constraint_name=jcol.constraint_name; 
관련 문제