2011-03-08 2 views
1

오라클에서 외래 키에 대한 일부 메타 데이터를 추출하려고합니다. "all_constraints"를 사용하여 모든 참조 제약 정보를 찾고 "all_cons_columns"를 사용하여 실제 열을 찾습니다. 그러나 외래 키에서 내 열의 순서를 가져올 수 없습니다.외래 키의 열 순서를 찾으십시오.

다음은 모두 3 개의 열이있는 4 개의 예제 테이블입니다. 테이블 중 3 개는 테이블 "tab_d"를 참조하지만 외부 키의 열 순서는 다릅니다. 이 주문은 "all_cons_columns"보기에 반영되지 않으므로이 정보를 사용할 수있는 다른 곳이 있습니까?

create table tab_d (
    col_a int, 
    col_b int, 
    col_c int, 
    constraint tab_d_pk primary key (col_a, col_b, col_c) 
); 

create table tab_e (
    ref_col_a int, 
    ref_col_b int, 
    ref_col_c int, 
    constraint tab_e_fk foreign key (ref_col_b, ref_col_c, ref_col_a) 
     references tab_d(col_b, col_c, col_a) 
); 

create table tab_f (
    ref_col_a int, 
    ref_col_b int, 
    ref_col_c int, 
    constraint tab_f_fk foreign key (ref_col_b, ref_col_c, ref_col_a) 
     references tab_d(col_c, col_a, col_b) 
); 

create table tab_g (
    ref_col_a int, 
    ref_col_b int, 
    ref_col_c int, 
    constraint tab_g_fk foreign key (ref_col_c, ref_col_b, ref_col_a) 
     references tab_d(col_c, col_b, col_a) 
); 

"all_cons_columns"에서 가져온 정보는 아래에 표시됩니다. 나는 내 테이블 "tab_g"어디에 위치 열 순서가 ref_col_c = 1, ref_col_b = 2 및 ref_col_a = 3 보여 주 생각 칼럼이 기본 키에있는 순서를 보여줍니다.

CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION 
TAB_F_FK   TAB_F  REF_COL_A 2 
TAB_F_FK   TAB_F  REF_COL_B 3 
TAB_F_FK   TAB_F  REF_COL_C 1 
TAB_E_FK   TAB_E  REF_COL_A 1 
TAB_E_FK   TAB_E  REF_COL_B 2 
TAB_E_FK   TAB_E  REF_COL_C 3 
TAB_G_FK   TAB_G  REF_COL_A 1 
TAB_G_FK   TAB_G  REF_COL_B 2 
TAB_G_FK   TAB_G  REF_COL_C 3 
+1

'ALL_CONS_COLUMNS' 결과는 자식 테이블의'COLUMN_NAME'이'ALL_CONSTRAINTS' 뷰에서 얻은 부모 테이블의 기본 키의 열에 어떻게 매핑되는지 보여줍니다. 외래 키를 정의 할 때 열을 나열하는 순서는 아무런 차이가 없습니다. 중요한 것은 상위 열의 매핑 일 뿐이므로 두 절에서 같은 순서로 정렬하면됩니다. –

+0

외래 키 제약 조건 정의에 열이 나열되는 순서의 중요성은 무엇입니까? 상위 테이블에서 열이 선언 된 순서는 기본 키 제약 조건을 적용하는 인덱스가 기본적으로 생성되는 방법에 영향을줍니다. 하위 테이블에 인덱스를 만들면 해당 인덱스의 열 순서를 얻을 수 있습니다. –

+0

편리 성을 위해 열의 순서를 원했기 때문에 가능한 한 CREATE 문 가까이에 메타 데이터를 표시 할 수 있었지만 가능하지 않으면 "all_cons_columns"의 위치를 ​​사용합니다. – aweis

답변

5

가 ALL_CONS_COLUMNS 뷰에 반영 인 열 순서 - POSITION라는 컬럼별로.

관련 문제