मैं Oracle में एक तालिका से कॉलम नाम कैसे प्राप्त कर सकता हूं?


184

मुझे स्तंभ नाम प्राप्त करने के लिए डेटाबेस को क्वेरी करने की आवश्यकता है , तालिका में डेटा के साथ भ्रमित होने की नहीं। उदाहरण के लिए, अगर मैं नाम के एक मेज है EVENT_LOGजिसमें eventID, eventType, eventDesc, और eventTime, तो मैं क्वेरी और कुछ नहीं से उन फ़ील्ड नाम पुनः प्राप्त करना चाहते हैं।

मैंने पाया कि यह कैसे करना है:

लेकिन मुझे यह जानने की जरूरत है: यह ओरेकल में कैसे किया जा सकता है ?

जवाबों:


191

आप तालिका स्तंभ मेटाडेटा के लिए USER_TAB_COLUMNS तालिका को क्वेरी कर सकते हैं।

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'MYTABLE'

21
ध्यान दें कि यह ओरेकल के लिए विशिष्ट है।
कंसर्नडऑफटुनब्रिजवल्स

8
क्या कोई कारण है कि यह "कोई पंक्तियों का चयन नहीं कर सका"? (ओरेकल में।)
इयान आर। ओ'ब्रायन

9
यदि आपके पास 'का चयन किया कोई भी पंक्ति' तो आप परिवर्तन करने के लिए कोशिश कर सकते USER_TAB_COLUMNSकरने के लिए all_tab_columns। परिणाम के बारे में 100% सुनिश्चित करने के लिए आप मसालेदार मालिक हो सकते हैं।
डेराकोन्टिस

2
आप "ORDER by column_id" जोड़ सकते हैं, यदि आप उन्हें उसी क्रम में पुनः प्राप्त करना चाहते हैं जिस क्रम में वे तालिका में बनाए गए थे। यहाँ मेज से कुछ अन्य प्रासंगिक स्तंभ डेटा हैं docs.oracle.com/cd/B19306_01/server.102/b14237/...
Bernauer

2
सुनिश्चित करें कि तालिका का नाम अपरकेस है।
ह्यूग सीग्रेव्स

67

SQL सर्वर में ...

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = (SELECT id FROM sysobjects WHERE type = 'V' AND [Name] = 'Your table name')

प्रकार = 'V' विचारों के लिए टाइप = 'U' तालिकाओं के लिए


39

तुम यह केर सकते हो:

describe EVENT_LOG

या

desc EVENT_LOG

नोट: केवल तभी लागू होता है जब आप तालिका का नाम और विशेष रूप से ओरेकल के लिए जानते हैं।


26

SQL सर्वर 2008 के लिए, हम कॉलम जानकारी प्राप्त करने के लिए information_schema.columns का उपयोग कर सकते हैं

SELECT *
FROM   information_schema.columns
WHERE  table_name = 'Table_Name'
ORDER  BY ordinal_position  

1
ध्यान दें कि INFORMATION_SCHEMAटेबल ANSI मानक मेटाडेटा टेबल हैं। कोई भी अच्छा, आधुनिक RDBMS उनके पास होगा।
बेकन बिट्स

18

SQLite के लिए मेरा मानना ​​है कि आप निम्नलिखित की तरह कुछ का उपयोग कर सकते हैं:

PRAGMA table_info(table-name);

Sqlite.org से स्पष्टीकरण:

यह प्रस्ताव नामांकित तालिका में प्रत्येक स्तंभ के लिए एक पंक्ति देता है। परिणाम सेट में कॉलम में कॉलम का नाम, डेटा प्रकार, कॉलम NULL हो सकता है या नहीं, और कॉलम के लिए डिफ़ॉल्ट मान शामिल है। परिणाम सेट में "pk" कॉलम उन स्तंभों के लिए शून्य है जो प्राथमिक कुंजी का हिस्सा नहीं हैं, और प्राथमिक कुंजी के भाग वाले स्तंभों के लिए प्राथमिक कुंजी में स्तंभ का सूचकांक है।

इसे भी देखें: Sqlite.org प्राग्मा टेबल इन्फो


1
मुझे यकीन नहीं है कि मुझे नीचे क्यों वोट दिया गया था, लेकिन मुझे खुशी है कि इससे आपको मदद मिली।
शील्डस्ट्रो

2
हो सकता है कि इसे अस्वीकृत कर दिया गया हो क्योंकि यह प्रश्न ओरेकल द्वारा टैग किया गया है।
बुरहान अली

2
मैंने Oracle टैग को हटा दिया है और इसे बढ़ा दिया है - मुझे लगा कि बहुत सारे उत्तर हैं क्योंकि यह प्रश्न एक सामान्य के रूप में बेहतर काम करता है। (मैं यहाँ mySQL एक की तलाश में आया था।)
icedwater

16

वह जानकारी ALL_TAB_COLUMNSसिस्टम टेबल में संग्रहीत है :

SQL> select column_name from all_tab_columns where table_name = 'DUAL';

DUMMY

या DESCRIBEयदि आप SQL * PLUS का उपयोग कर रहे हैं, तो आप तालिका को देख सकते हैं:

SQL> desc dual
Name                               Null?    Type
----------------------------------------------------- -------- ---------------------- -------------
DUMMY                               VARCHAR2(1)

आधिकारिक ALL_TAB_COLUMNSओरेकल डेटाबेस संदर्भ के माध्यम से आधिकारिक प्रलेखन । यह दृश्य वर्तमान उपयोगकर्ता के लिए सुलभ तालिकाओं, दृश्यों और समूहों के स्तंभों का वर्णन करता है।
श्री पॉलीविरल

लेकिन हम मेज के सामने स्कीमा नाम नहीं दे सकते, है ना? उदाहरण के लिए अगर मैं इस तरह से चाहता हूँ select column_name from all_tab_columns where table_name = 'dbo.usertbl';
AhammadaliPK

9

अन्य उत्तर पर्याप्त रूप से प्रश्न का उत्तर देते हैं, लेकिन मुझे लगा कि मैं कुछ अतिरिक्त जानकारी साझा करूंगा। अन्य लोग टेबल की जानकारी प्राप्त करने के लिए "DESCRIBE टेबल" सिंटैक्स का वर्णन करते हैं। यदि आप उसी प्रारूप में जानकारी प्राप्त करना चाहते हैं, लेकिन DESCRIBE का उपयोग किए बिना, आप कर सकते हैं:

SELECT column_name as COLUMN_NAME, nullable || '       ' as BE_NULL,
  SUBSTR(data_type || '(' || data_length || ')', 0, 10) as TYPE
 FROM all_tab_columns WHERE table_name = 'TABLENAME';

शायद ज्यादा मायने नहीं रखता है, लेकिन मैंने इसे पहले लिखा था और यह फिट लगता है।


SQL सर्वर 2008 में अब (वर्षों बाद) यह कोशिश करते हुए, मुझे एक Incorrect Syntax near '|'त्रुटि मिलती है
अल लेलोपाथ

4

Oracle के लिए

SELECT column_name FROM user_tab_cols WHERE table_name=UPPER('tableName');

3
select column_name,* from information_schema.columns
 where table_name = 'YourTableName'
order by ordinal_position

क्या यह क्वेरी काम करती है, एक कोल नाम और स्टार निर्दिष्ट करने के साथ- "column_name चुनें, *" .. यह Oracle में काम नहीं कर रहा है।
तेजा


3

MySQL के लिए, का उपयोग करें

SELECT column_name 
FROM information_schema.columns 
WHERE 
table_schema = 'Schema' AND table_name = 'Table_Name'

3

यहां तक ​​कि यह भी एक तरीका है जिससे हम इसका इस्तेमाल कर सकते हैं

select * from product where 1 != 1

2

SQL सर्वर के लिए:

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = object_id('TABLE_NAME')

2
SELECT COLUMN_NAME 'all_columns' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='user';

ढेर अतिप्रवाह @expert एक पर आपका स्वागत है। यहां तक ​​कि अगर आपका उत्तर सटीक प्रतीत होता है, तो कृपया जस्ट 'कोड' की तुलना में अधिक विवरण और स्पष्टीकरण जोड़ें। यह सभी के लिए स्पष्ट होगा।
जीन-रेमी रेवी

1

आप यह भी आज़मा सकते हैं, लेकिन यह आपकी ज़रूरत से ज़्यादा जानकारी हो सकती है:

sp_columns TABLE_NAME

1

माई एसक्यूएल

SHOW COLUMNS FROM a_table_named_users WHERE Field REGEXP 'user_id|user_name|user_pass'

यह इस तरह से कुछ परिणाम देगा:

Field     |  Type        |   Null   |   Key   |   Default   |   Extra  
user_id      int(8)          NO         PRI       NULL          auto_increment
user_name    varchar(64)     NO         MUL       NULL
user_pass    varchar(64)     NO                   NULL

फिर उन मूल्यों को बाहर निकालने के लिए जिन्हें आप बस कह सकते हैं

fetch row[0]

यह भी इनपुट को डायनेमिक रूप से पास करने के लिए बहुत अच्छा है क्योंकि REGEXP को '|' कई इनपुट्स के लिए, लेकिन डेटा को अलग रखने और कक्षाओं / कार्यों के लिए स्टोर / पास करने में आसान बनाने का एक तरीका भी है।

इसे बाहर भेजते समय डमी डेटा में सुरक्षा के साथ-साथ फेंकने की कोशिश करें और किसी भी त्रुटि को प्राप्त करते समय जो लौटा था उसकी तुलना करें।


1

Oracle में, स्तंभों का वर्णन करने वाले दो दृष्टिकोण हैं:

  • DBA_TAB_COLUMNS डेटाबेस में सभी तालिकाओं, विचारों और समूहों के स्तंभों का वर्णन करता है।

  • USER_TAB_COLUMNS
    वर्तमान उपयोगकर्ता के स्वामित्व वाले तालिकाओं, विचारों और समूहों के स्तंभों का वर्णन करता है । यह दृश्य
    OWNER कॉलम प्रदर्शित नहीं करता है ।


0

इसका उत्तर यहाँ है: http://php.net/manual/en/function.mysql-list-fields.php मैं आपके मामले में निम्नलिखित कोड का उपयोग करूँगा:

$result = mysql_query("SHOW COLUMNS FROM sometable");
if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}
$fields = array();
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
        $fields[] = $row['Field'];
    }
}

0
SELECT A.COLUMN_NAME, A.* FROM all_tab_columns a 
WHERE table_name = 'Your Table Name'
AND A.COLUMN_NAME = 'COLUMN NAME' AND a.owner = 'Schema'

0

आप इस क्वेरी को चला सकते हैं

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%%' --if you want to find specific column write here 
ORDER BY schema_name, table_name;

-1

ओरेकल के लिए, तालिका से पहली पंक्ति चुनें: select * from <table name> where rownum = 1;


क्या पंक्तिबद्ध खड़ा है? क्या मुझे पंक्तिबद्ध नाम वाले कॉलम का उपयोग करने की आवश्यकता है?
merve bıçakçı

-1

इस सवाल के पार टेराडाटा पर कॉलम नामों की पहुंच की तलाश में है, इसलिए मैं एसक्यूएल के उनके 'स्वाद' के लिए जवाब जोड़ूंगा:

SELECT ColumnName
FROM DBC.Columns
WHERE DatabaseName='DBASE_NAME'
AND TableName='TABLE_NAME';

जानकारी डीबीसी dbase में संग्रहीत है।

डेटा प्रकार प्राप्त करना थोड़ा अधिक शामिल है: टेराडाटा सिस्टम तालिकाओं का उपयोग करके कॉलम प्रकार प्राप्त करें


-1

इसे इस्तेमाल करे

select * from sys.all_columns c join sys.objects o on c.object_id=o.object_id where o.name = 'TABLENAME' and c.name like '%COLUMN NAME%'

-3

मैंने इसे इस तरह किया

SELECT 
    TOP 0
    *
FROM
    Posts

यह http://data.stackexchange.com में भी काम करता है जिसकी सेवा तालिका के बारे में मुझे जानकारी नहीं है!


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