Pregunta ¿Cómo obtener la columna de clave principal en Oracle?


Necesito obtener el nombre de la columna de clave principal.

En la entrada, solo tengo el nombre de la tabla.


74
2018-01-26 10:14


origen


Respuestas:


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;

Asegúrese de que 'TABLE_NAME' esté en mayúscula dado que Oracle almacena los nombres de las tablas en mayúsculas.


136
2018-01-26 10:26



Lo mismo que la respuesta de 'Richie' pero un poco más conciso.

  1. Consultar solo restricciones de usuario

    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. Consulta de todas las restricciones

    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'
    );
    

14
2017-09-22 13:01



Select constraint_name,constraint_type from user_constraints where table_name** **= ‘TABLE_NAME’ ;

(Esto mostrará la clave principal y luego)

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

(Esto le dará la columna, aquí PK_XYZ es el nombre clave principal)


2
2018-04-25 14:00



Prueba este código Aquí creé una tabla para obtener la columna de clave principal en el oráculo que se llama prueba y luego consulta

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
2018-05-24 11:22



Guarde la siguiente secuencia de comandos como algo como 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');

Entonces se puede llamar usando

@findPK

0
2017-09-09 03:42