在外键中查找列的顺序

时间:2011-03-08 09:51:21

标签: oracle foreign-keys metadata

我试图从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 个答案:

答案 0 :(得分:5)

的顺序反映在ALL_CONS_COLUMNS视图中 - 名为POSITION的列。