【问题标题】:Retrieving key attribute names of a given table检索给定表的关键属性名称
【发布时间】:2009-09-02 19:40:55
【问题描述】:

我正在再次开发数据库中间件应用程序。我想检索给定表的所有键值的名称。

例如:

创建表 foo(A 整数主键,B VARCHAR(255))

我想向 Oracle 询问 'foo' 的主键,我想得到 'A'。

这在 Oracle 中是否可行?我试图搜索他们的文档,但找不到任何有价值的东西。

提前致谢

【问题讨论】:

    标签: oracle oracle10g primary-key


    【解决方案1】:

    Source:

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

    确保输入 table_name 大写,因为 Oracle 存储所有表 大写的名字。让我们快点 解释这个查询的输出。 table_name 是表的名称 (以大写形式存储)。 column_name 是 作为一部分的列的名称 的主键。(也存储在 大写)位置是位置 主键。主键可以 包含多于一列,所以 了解列的顺序 在主键中很重要。 status 表示是否主 键当前已启用或禁用。 owner 表示拥有的架构 桌子。

    ALL_CONSTRAINTS - 这里对 ALL_CONSTRAINTS 做了很好的描述

    ALL_CONS_COLUMNS - 这里是 ALL_CONS_COLUMNS 的一个很好的描述

    【讨论】:

    • 哇,谢谢。我认为这会有所帮助。谢谢斯维特洛扎 :-)。在 Oracle 文档页面上,什么是合适的搜索词?约束?
    • 小注释 - Oracle 不会将其所有表名都以大写形式存储。它在创建时将所有对象名称默认为大写,但是如果您将对象名称括在引号中 [例如create table "lower" (col_id number);] 那么 Oracle 将保留定义的案例 [即对于上面创建的表,select * from lower 将失败,但 select * from "lower" 将成功]。当我无法弄清楚为什么看不到表格时,我遇到了一些自动生成脚本。您还可以通过在表名的开头和结尾添加空格来扰乱 DBA 的思维,从而获得一些乐趣!
    • 邪恶 >:)。我之前遇到过大写“问题”,但添加空格是一层。小时。谢谢,克里斯^^
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2010-10-14
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2016-05-02
    相关资源
    最近更新 更多