web-dev-qa-db-fra.com

Comment obtenir la colonne de clé primaire dans Oracle?

Je dois obtenir le nom de la colonne de clé primaire.

Dans l'entrée, je n'ai que le nom de la table.

94
Kirill A.
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;

Assurez-vous que 'TABLE_NAME' est en majuscule, car Oracle stocke les noms de table en majuscule.

170
Richie

Identique à la réponse de 'Richie' mais un peu plus concise.

  1. Requête pour les contraintes utilisateur uniquement

    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'
    );
    
  2. Requête pour toutes les contraintes

    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'
    );
    
17
My-Name-Is
Select constraint_name,constraint_type from user_constraints where table_name** **= ‘TABLE_NAME’ ;

(Ceci listera la clé primaire puis)

Select column_name,position from user_cons_cloumns where constraint_name=’PK_XYZ’; 

(Cela vous donnera la colonne, ici PK_XYZ est le nom de la clé primaire)

2
Vipin Tiwari

Essayez ce code ici. J'ai créé une table pour obtenir la colonne de clé primaire dans Oracle, appelée test puis requête.

create table test
(
id int,
name varchar2(20),
city varchar2(20),
phone int,
constraint pk_id_name_city primary key (id,name,city)
);

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 = 'TEST' AND cons.constraint_type = 'P' AND cons.constraint_name = cols.constraint_name AND cons.owner = cols.owner  ORDER BY cols.table_name, cols.position;
1
Kobir

Enregistrez le script suivant sous quelque chose comme findPK.sql.

set verify off
accept TABLE_NAME char Prompt 'Table name>'

SELECT cols.column_name
FROM all_constraints cons NATURAL JOIN all_cons_columns cols
WHERE cons.constraint_type = 'P' AND table_name = UPPER('&TABLE_NAME');

Il peut ensuite être appelé en utilisant

@findPK
0
Bugalugs Nash