如何在Oracle中获取主键列?

Kir*_* A. 96 oracle

我需要获取主键列的名称.

在输入中,我只有表名.

Ric*_*hie 173

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;
Run Code Online (Sandbox Code Playgroud)

确保'TABLE_NAME'为大写,因为Oracle以大写形式存储表名.

  • 我想你会把两个单引号围绕它就像这个''P'' (4认同)

My-*_*-Is 17

与'里奇'的答案相同,但更简洁.

  1. 仅查询用户约束

    SELECT column_name FROM all_cons_columns WHERE constraint_name = (
      SELECT constraint_name FROM user_constraints 
      WHERE UPPER(table_name) = UPPER('tableName') AND CONSTRAINT_TYPE = 'P'
    );
    
    Run Code Online (Sandbox Code Playgroud)
  2. 查询所有约束

    SELECT column_name FROM all_cons_columns WHERE constraint_name = (
      SELECT constraint_name FROM all_constraints 
      WHERE UPPER(table_name) = UPPER('tableName') AND CONSTRAINT_TYPE = 'P'
    );
    
    Run Code Online (Sandbox Code Playgroud)

  • @FearlessFuture 我假设您要搜索的约束不是用户约束。用 `all_constraints` 替换 `user_constraints`。 (2认同)