Devo ottenere il nome della colonna della chiave primaria.
Nell'input ho solo il nome della tabella.
Devo ottenere il nome della colonna della chiave primaria.
Nell'input ho solo il nome della tabella.
Risposte:
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;
Assicurati che "TABLE_NAME" sia in maiuscolo poiché Oracle memorizza i nomi delle tabelle in maiuscolo.
q.
Come la risposta di "Richie" ma un po 'più concisa.
Interroga solo i vincoli dell'utente
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'
);
Query per tutti i vincoli
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'
);
user_constraintscon all_constraints.
SELECT owner, column_name, position FROM all_cons_columns WHERE (owner, constraint_name) in (SELECT owner, constraint_name FROM all_constraints WHERE UPPER(table_name) = UPPER('&tableName') AND CONSTRAINT_TYPE = 'P') order by owner, position;
Select constraint_name,constraint_type from user_constraints where table_name** **= ‘TABLE_NAME’ ;
(Questo elencherà la chiave primaria e poi)
Select column_name,position from user_cons_cloumns where constraint_name=’PK_XYZ’;
(Questo ti darà la colonna, qui PK_XYZ è il nome della chiave principale)
Prova questo codice Qui ho creato una tabella per ottenere la colonna della chiave primaria in Oracle che si chiama test e quindi query
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;
Salva il seguente script come qualcosa come 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');
Può quindi essere chiamato utilizzando
@findPK