2013-04-28 2 views
2

기존의 오라클 데이터베이스 시스템 (10g)에서 작업 중이며 자세한 스키마 정보가 없습니다. 테이블의 특정 레코드를 삭제하면 다른 테이블에서 계단식 삭제가 발생하는지 알아야합니다. 트리거를 확인했습니다. 그러나, 나는 참조 제약 때문에 계단식에 대해 확신하지 못합니다. 이것을 식별 할 수있는 간단한 방법이 있습니까?오라클은 삭제가 캐스케이드 될 것인지 확인합니다.

+0

내가 늙어 가고있는 것 같아요 - 10g는 이제 유산입니까? – haki

답변

8

당신이 알고있는 (또는 확인할 수) 관련된 외래 키 제약 조건 (들)을 가정 할 때, 당신은 당신에게 특정 참조하는 모든 외래 키 제약 조건을 표시합니다 DBA_CONSTRAINTS

SELECT constraint_name, delete_rule 
    FROM dba_constraints 
WHERE r_constraint_name = <<name of the primary key constraint>> 
    AND r_owner = <<owner of the primary key constraint>> 
    AND delete_rule = 'CASCADE' 

에서 DELETE_RULE 열을 볼 수 있습니다 기본 키 제약 조건은 삭제를 계단식으로 배열합니다. 부모 행이 삭제 될 때 SET NULL을 수행 할 제약 조건에 신경 쓰면 delete_ruleSET NULL 인 행을 찾을 수 있습니다.

DBA_CONSTRAINTS 테이블에 대한 권한이없는 경우 SELECT 권한이있는 테이블에만 실제로 관심이 있다고 가정하고 ALL_CONSTRAINTS을 대신 사용할 수 있습니다.

+0

감사합니다 저스틴! – vikas

+0

'''user_constraints'''보기를 사용하지 않으시겠습니까? – Ben

+1

@Ben - 제약 조건을 소유하고 있거나 그러한 제약 조건이있는 테이블에 대한 액세스 권한이있는 경우 'user_constraints' 또는'all_constraints'를 사용할 수 있습니다. 아마도 스키마에서 테이블을 참조하는 외래 키를 가진'select' 액세스가없는 다른 스키마에있는 테이블이있을 수 있습니다. 이 경우'dba_constraints'를 사용해야합니다. –

관련 문제