2011-03-08 48 views
1

我想從Oracle中提取一些關於外鍵的元數據。我正在使用「all_constraints」來查找所有參考約束信息和「all_cons_columns」以查找實際列。但是,我無法在外鍵中獲得列的順序。查找外鍵列順序

以下是4個例表中的所有3列。其中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'視圖獲得。在定義外鍵時,列出列的順序沒有什麼區別 - 它只是與父列有關的映射,因此它們必須在兩個子句中都處於相同順序。 – 2011-03-08 10:51:10

+0

列在外鍵約束定義中列出的順序的意義是什麼?在父表中聲明列的順序影響默認情況下如何創建強制執行主鍵約束的索引。如果您在子表上創建索引,則可以獲取該索引中列的順序。 – 2011-03-08 11:00:17

+0

爲了方便起見,我想要列的順序,這樣我就能夠將元數據儘可能接近create語句,但如果這是不可能的,我將只使用「all_cons_columns」中的位置 - 感謝澄清 – aweis 2011-03-08 13:30:18

回答

5

反映在ALL_CONS_COLUMNS視圖的順序 - 通過調用位置的列。