ओरेकल में प्राथमिक कुंजी कॉलम कैसे प्राप्त करें?


107

मुझे प्राथमिक कुंजी कॉलम का नाम प्राप्त करने की आवश्यकता है।

इनपुट में, मेरे पास केवल तालिका का नाम है।

जवाबों:


190
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 ऊपरी मामले में तालिका नामों को संग्रहीत करता है।


धन्यवाद, रिची। एक और सवाल: 'P' को कैसे एनकोड करना है? मुझे इसे "एक्जाम IMMEDIATE" के साथ निष्पादित करने की आवश्यकता है। फिर से thnx।
— किरिल ए।

4
मुझे लगता है कि आप सिर्फ दो सिंगल कोट्स को इस '' पी '' की तरह राउंड
— ग्रेग रेनॉल्ड्स

वैकल्पिक रूप से, आप इसका उपयोग करके उद्धृत कर सकते हैं q।
— बुरहान अली

और विदेशी कुंजी के लिए constraint_type = 'R'
— Abinash Bishoyi

तालिका के पहले स्कीमा उपसर्ग नहीं होने पर मेरे लिए काम किया! धन्यवाद!
— फियरलेस

20

'रिची' से जवाब के रूप में ही लेकिन थोड़ा और अधिक संक्षिप्त।

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

@FearlessFuture मेरे लिए यह अच्छी तरह से काम किया। क्या आप अपनी समस्या को थोड़ा अधिक अभिव्यंजक बता सकते हैं?
— मेरा नाम-

मुझे इस क्वेरी से कोई परिणाम नहीं मिलता है, लेकिन मुझे स्वीकृत उत्तर के लिए क्वेरी से परिणाम मिलते हैं।
— फियरलेस

2
@FearlessFuture मैं मानता हूं कि आप जो बाधा खोज रहे हैं, वह उपयोगकर्ता बाधा नहीं है। user_constraintsद्वारा प्रतिस्थापित करें 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;
— मार्क स्टीवर्ट

1
@MarkStewart मैं सहमत हूं कि दूसरा प्रश्न काम नहीं करेगा। लेकिन आपका समाधान अक्षम है। आज़माएं: "SELECT cols.column_name AS KEY_STREAM, '=' AS KEY_CONDITION, cols.column_name as KEY_LOOKUP, '' AS KEY_STREAM2 के रूप में, user_consttsts विपक्ष से, user_cons_columns cols WHERE cons.constraint_name = cols.sive/sts.sive/sestrestest = '<TABLE_NAME>' और cons.table_name = cols.table_name; "
— अलेक्जेंडर हेम

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

(यह प्राथमिक कुंजी को सूचीबद्ध करेगा और फिर)

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

(यह आपको कॉलम देगा, यहां पीके_एक्सवाईजेड प्रमुख नाम है)


1

इस कोड का प्रयास करें यहां मैंने ओरेकल में प्राथमिक कुंजी कॉलम प्राप्त करने के लिए एक तालिका बनाई है जिसे परीक्षण और फिर क्वेरी कहा जाता है

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;

0

निम्न स्क्रिप्ट को 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');

इसे तब उपयोग करके बुलाया जा सकता है

@findPK
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.