Oracle表的主键

时间:2014-08-21 23:51:48

标签: sql oracle

我正在尝试检索表名EMPLOYEE的主键,如下所示

    SELECT  cols.column_name
    FROM all_constraints cons, all_cons_columns cols
    WHERE cols.table_name ='EMPLOYEE'
    AND cons.constraint_type = 'P'
    AND cons.constraint_name = cols.constraint_name
    AND cons.owner = cols.owner
    ORDER BY cols.table_name, cols.position

表EMPLOYEE存在于另一个用户,该用户也有一个名为ID

的主键

因此上述查询的结果给出(ID,ID)而不是当前用户的(ID)。如何仅获取属于用户架构的表的主键

1 个答案:

答案 0 :(得分:0)

  1. 切换到USER_*次观看,而不是ALL_*
  2. 消除查询中OWNER列的条件。

    • ALL_*视图返回查询架构可以访问的所有内容,包括架构拥有的对象,与
    • 相反
    • USER_*个视图仅返回架构为
    • 所有者的对象
    • DBA_*次视图返回数据库中的所有对象

    因此,您可以查询USER_*次观看,也可以查看指定DBA_*列条件的OWNER次观看结果。

    在您的情况下,您的查询可能如下所示。

    select
      cons.table_name
    , cons.constraint_name
    , cols.column_name
    , cols.position
    from user_constraints cons, user_cons_columns cols
    where cons.constraint_name = cols.constraint_name
    and constraint_type = 'P'
    order by cons.table_name;
    

    有关数据字典和视图及其范围的更多详细信息,请参阅概念中的Data Dictionary and Dynamic Performance Views部分。