Oracle में सभी तालिकाओं की सूची प्राप्त करें?


1102

इसमें सभी तालिकाओं के नाम प्रदर्शित करने के लिए मैं एक Oracle डेटाबेस को कैसे क्वेरी करूं?


1
क्या SHOW TABLES(MySQL में किया गया) काम करता है?
मार्टिन थॉमा

1
@ मर्टिनथोमा नोप। Google का सहारा लेने से पहले, पहले प्रयास किया गया था
आदम बुर्ले

जवाबों:


1364
SELECT owner, table_name
  FROM dba_tables

यह मान रहा है कि आपके पास DBA_TABLESडेटा डिक्शनरी व्यू तक पहुंच है । यदि आपके पास वे विशेषाधिकार नहीं हैं, लेकिन उनकी आवश्यकता है, तो आप अनुरोध कर सकते हैं कि DBA स्पष्ट रूप से आपको उस तालिका पर विशेषाधिकार प्रदान करता है, या, कि DBA आपको SELECT ANY DICTIONARYविशेषाधिकार या SELECT_CATALOG_ROLEभूमिका प्रदान करता है (या तो आप किसी भी डेटा शब्दकोश तालिका को क्वेरी करने की अनुमति देगा। )। बेशक, आप कुछ स्कीमा जैसे को बाहर करना चाह सकते हैं SYSऔर SYSTEMजिनमें बड़ी संख्या में ओरेकल टेबल हैं जिनकी आपको शायद परवाह नहीं है।

वैकल्पिक रूप से, यदि आपके पास पहुंच नहीं है DBA_TABLES, तो आप उन सभी तालिकाओं को देख सकते हैं जो आपके खाते की पहुंच ALL_TABLESदृश्य के माध्यम से हैं:

SELECT owner, table_name
  FROM all_tables

हालाँकि, यह डेटाबेस में उपलब्ध तालिकाओं का सबसेट हो सकता है (ALL_TABLES आपको उन सभी तालिकाओं की जानकारी दिखाता है जो आपके उपयोगकर्ता को दी गई हैं)।

यदि आप केवल उन तालिकाओं से संबंध रखते हैं जो आपके पास हैं, न कि उन तक जिनकी आप पहुंच रखते हैं, आप उपयोग कर सकते हैं USER_TABLES:

SELECT table_name
  FROM user_tables

चूंकि USER_TABLESकेवल आपके पास मौजूद तालिकाओं के बारे में जानकारी है, इसलिए इसमें एक OWNERकॉलम नहीं है - स्वामी, परिभाषा के अनुसार, आप हैं।

ओरेकल भी लीगेसी डेटा की एक संख्या शब्दकोश views-- है TAB, DICT, TABS, और CATकि example-- लिए इस्तेमाल किया जा सकता है। सामान्य तौर पर, मैं इन विरासत विचारों का उपयोग करने का सुझाव नहीं दूंगा जब तक कि आपको अपनी स्क्रिप्ट को Oracle 6 में वापस करने की आवश्यकता न हो। Oracle ने लंबे समय में इन विचारों को नहीं बदला है, इसलिए उन्हें अक्सर नए प्रकार की वस्तुओं के साथ समस्या होती है। उदाहरण के लिए, TABऔर CATदृश्य दोनों उन तालिकाओं के बारे में जानकारी दिखाते हैं जो उपयोगकर्ता के रीसायकल बिन में होती हैं जबकि [DBA|ALL|USER]_TABLESविचार उन सभी को फ़िल्टर करते हैं। "TABLE" के CATसाथ भौतिक रूप से देखे जाने वाले लॉग के बारे में जानकारी दिखाता है TABLE_TYPEजो कि वास्तव में आप जो चाहते हैं वह होने की संभावना नहीं है। DICTटेबल और समानार्थी शब्द को जोड़ती है और आपको यह नहीं बताती है कि कौन वस्तु का मालिक है।


8
मुझे एक अपवाद मिल रहा है "ORA-00942: तालिका या दृश्य मौजूद नहीं है"
18

45
तब आपको डेटाबेस की सभी तालिकाओं को देखने की अनुमति नहीं दी गई है। आप उन सभी तालिकाओं को देखने के लिए ALL_TABLES डेटा डिक्शनरी दृश्य को क्वेरी कर सकते हैं, जिन्हें आप एक्सेस करने की अनुमति देते हैं, जो डेटाबेस में तालिकाओं का एक छोटा सबसेट हो सकता है।
जस्टिन केव

साधारण गलती अगर हर रोज़ वर्गप्लस उपयोगकर्ता नहीं है: अंतिम अर्ध-उपनिवेश ('?') को जोड़ दें, अगर यू सिर्फ उपरोक्त कमांड के साथ परिणाम नहीं देता है :)।
गिम्हनी

बस ध्यान दें कि Oracle 12c के रूप में, आपके परिणाम सेट से सिस्टम तालिकाओं को हटाने में मदद करने के लिए dba_users डेटा शब्दकोश में एक कॉलम है। पूर्ण क्वेरी का चयन मालिक होगा, तालिका_नाम dba_tables से जहां मालिक नहीं है (dba_users से उपयोगकर्ता नाम चुनें जहां oracle_maintain = 'Y')
saritonin

181

क्वेरी user_tables और dba_tablesकाम नहीं किया।
यह एक किया:

select table_name from all_tables  

14
@LimitedAtonement क्षमा करें, यह स्पष्ट गलत है। व्यू को user_tables कहा जाता है, न कि user_table। अगर user_tables ने vitule के लिए काम नहीं किया, तो कुछ और था।
फ्रैंक श्मिट

67

एक कदम आगे जाने पर, एक और दृश्य होता है जिसे cols (all_tab_columns) कहा जाता है, जिसका उपयोग यह पता लगाने के लिए किया जा सकता है कि किस तालिका में दिए गए कॉलम का नाम है।

उदाहरण के लिए:

SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';

ईएसटी से शुरू होने वाले सभी नामों को खोजने के लिए और कॉलम उनके नाम में कहीं भी CALLREF युक्त होते हैं।

यह काम करते समय मदद कर सकता है कि आप अपने कॉलम और नामकरण सम्मेलनों के आधार पर किन कॉलमों में शामिल होना चाहते हैं।


4
मैंने किया select * from colsऔर 0 पंक्तियाँ लौटा दीं।
गाबे

50

के साथ बेहतर देखने के लिए sqlplus

यदि आप उपयोग कर रहे हैं तो आप sqlplusपहले यह देख सकते हैं कि आपके कॉलम में खराबी हो रही है या नहीं (ये चर आपके sqlplusसत्र से बाहर निकलने के बाद भी कायम नहीं रहना चाहिए )।

set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000

सभी तालिकाएँ दिखाएं

तब आप सभी तालिका नामों को देखने के लिए कुछ इस तरह का उपयोग कर सकते हैं:

SELECT table_name, owner, tablespace_name FROM all_tables;

टेबल्स यू ओन ओन

जैसा कि @ जस्टिन गुफा का उल्लेख है, आप इसका उपयोग केवल उन तालिकाओं को दिखाने के लिए कर सकते हैं जो आपके पास हैं:

SELECT table_name FROM user_tables;

दृश्यों के बारे में मत भूलना

ध्यान रखें कि कुछ "टेबल" वास्तव में "विचार" हो सकते हैं, इसलिए आप कुछ इस तरह चलाने की कोशिश कर सकते हैं:

SELECT view_name FROM all_views;

परिणाम

यह कुछ ऐसा होना चाहिए जो काफी स्वीकार्य लगता है जैसे:

परिणाम


8
"बेहतर देखने" की सलाह के लिए धन्यवाद, लेकिन क्या आप ओवर राइटिंग नहीं कर pagesize 30रहे हैं pagesize 1000?
पाब्लो रिकाल्ड


18
    select object_name from user_objects where object_type='TABLE';

---------------- या ------------------

    select * from tab;

---------------- या ------------------

    select table_name from user_tables;


9

User_tables से चयन करने का प्रयास करें जो वर्तमान उपयोगकर्ता के स्वामित्व वाली तालिकाओं को सूचीबद्ध करता है।


9

Oracle डेटाबेस नीचे क्वेरी का उपयोग करके सभी तालिकाओं के नाम प्रदर्शित करने के लिए

मालिक का चयन करें, तालिका_नाम dba_tables से;

मालिक का चयन करें, table_name all_tables से;

User_tables से table_name का चयन करें;

अधिक जानें: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html


8

उनमें से किसी के साथ, आप चुन सकते हैं:

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM DBA_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

SELECT DISTINCT OWNER, OBJECT_NAME 
    FROM ALL_OBJECTS 
    WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';

6
select * from dba_tables

सभी उपयोगकर्ताओं की सभी तालिकाएं केवल तभी देती हैं जब आपने जिस उपयोगकर्ता से लॉग इन किया था वह sysdbaविशेषाधिकार है।


4
यह वास्तव में सही नहीं है। SYSDBA की आवश्यकता नहीं है। आप कई तरीकों से DBA_TABLES तक पहुँच प्राप्त कर सकते हैं। 1.) SYS द्वारा उपयोगकर्ता को वस्तु पर प्रत्यक्ष अनुदान। 2.) उपयोगकर्ता को किसी भी विशिष्ट विशेषाधिकार का चयन करें। 3.) SELECT_CATALOG_ROLE भूमिका का अनुदान।
मार्क जे। बोबाक

4

मुझे जवाब नहीं मिला, जो उपयोग करने के लिए इंगित करेगा

DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)

इसलिए मेरे संस्करण को भी जोड़ने का फैसला किया। यह दृश्य वास्तव में अधिक है कि DBA_TABLES के रूप में यह वस्तु तालिकाओं के रूप में अच्छी तरह से ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ) देता है।


4

आप Oracle डेटा शब्दकोश का उपयोग कर सकते हैंऑरेकल ऑब्जेक्ट्स के बारे में जानकारी प्राप्त करने के लिए का ।

आप विभिन्न तरीकों से तालिकाओं की सूची प्राप्त कर सकते हैं:

select * 
from dba_tables

या उदाहरण के लिए:

select * 
from dba_objects 
where object_type = 'TABLE' 

तब आप तालिका के नाम का उपयोग कर टेबल कॉलम प्राप्त कर सकते हैं:

select * 
from dba_tab_columns

फिर आप निर्भरता (ट्रिगर, विचार और आदि) की सूची प्राप्त कर सकते हैं:

select * 
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name 

तब आप इस ऑब्जेक्ट का टेक्स्ट स्रोत प्राप्त कर सकते हैं:

select * from dba_source

और आप चाहें तो उपयोग USERया ALLविचार कर सकते DBAहैं।


4

सहित विचार:

SELECT owner, table_name as table_view
  FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
  FROM DBA_VIEWS

4

हम नीचे दिए गए क्वेरी से कॉलम विवरण सहित सभी टेबल प्राप्त कर सकते हैं:

SELECT * FROM user_tab_columns;

4

नीचे SQL प्रश्नों का एक टिप्‍पणी वर्णन किया गया है जिसमें बताया गया है कि आप किस प्रकार उपयोग कर सकते हैं:

-- need to have select catalog role
SELECT * FROM dba_tables;

-- to see tables of your schema
SELECT * FROM user_tables;

-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;

2

निम्नलिखित क्वेरी केवल आवश्यक डेटा को सूचीबद्ध करती है, जबकि अन्य उत्तरों ने मुझे अतिरिक्त डेटा दिया है जो केवल मुझे भ्रमित करता है।

select table_name from user_tables;

2

SQLcl में एक नई सुविधा उपलब्ध है (जो कि ओरेकल डेटाबेस के लिए एक मुफ्त कमांड लाइन इंटरफ़ेस है)

Tables उर्फ।

इस सुविधा के उपयोग और अतिरिक्त पहलुओं को दिखाने वाले कुछ उदाहरण यहां दिए गए हैं। सबसे पहले, sqlकमांड लाइन ( sql.exeविंडोज़ में) सत्र से कनेक्ट करें । डेटा प्रदर्शित करने वाले किसी भी अन्य आदेश या क्वेरी को चलाने से पहले इस sqlcl विशिष्ट कमांड को दर्ज करने की सिफारिश की जाती है।

SQL> set sqlformat ansiconsole     -- resizes the columns to the width of the 
                                   -- data to save space 

SQL> tables

TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..

यह जानने के लिए कि tablesउपनाम किसका उल्लेख कर रहा है, आप बस उपयोग कर सकते हैंalias list <alias>

SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------

 select table_name "TABLES" from user_tables

SQL के तहत डिफ़ॉल्ट रूप से आने पर आपको इस उपनाम को परिभाषित करने की आवश्यकता नहीं है। यदि आप एक विशिष्ट स्कीमा से तालिकाओं को सूचीबद्ध करना चाहते हैं, तो एक नए उपयोगकर्ता-परिभाषित उपनाम का उपयोग करके और स्कीमा नाम को बाइंड तर्क के रूप में केवल कॉलम के एक सेट के साथ प्रदर्शित किया जा रहा है, आप ऐसा कर सकते हैं

SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;

इसके बाद आप केवल तर्क के रूप में स्कीमा नाम दे सकते हैं

SQL> tables_schema HR

OWNER   TABLE_NAME               LAST_ANALYZED
HR      DUMMY1                   18-10-18
HR      YOURTAB2                 16-11-18
HR      YOURTABLE                01-12-18
HR      ID_TABLE                 05-12-18
HR      REGIONS                  26-05-18
HR      LOCATIONS                26-05-18
HR      DEPARTMENTS              26-05-18
HR      JOBS                     26-05-18
HR      EMPLOYEES                12-10-18
..
..

एक अधिक परिष्कृत पूर्व-परिभाषित उपनाम के रूप में जाना जाता है Tables2, जो कई अन्य स्तंभों को प्रदर्शित करता है।

SQL> tables2

Tables
======
TABLE_NAME                 NUM_ROWS   BLOCKS   UNFORMATTED_SIZE COMPRESSION     INDEX_COUNT   CONSTRAINT_COUNT   PART_COUNT LAST_ANALYZED
AN_IP_TABLE                       0        0                  0 Disabled                  0                  0            0 > Month
PARTTABLE                         0        0                  0                           1                  0            1 > Month
TST2                              0        0                  0 Disabled                  0                  0            0 > Month
TST3                              0        0                  0 Disabled                  0                  0            0 > Month
MANAGE_EMPLYEE                    0        0                  0 Disabled                  0                  0            0 > Month
PRODUCT                           0        0                  0 Disabled                  0                  0            0 > Month
ALL_TAB_X78EHRYFK                 0        0                  0 Disabled                  0                  0            0 > Month
TBW                               0        0                  0 Disabled                  0                  0            0 > Month
DEPT                              0        0                  0 Disabled                  0                  0            0 > Month

यह जानने के लिए कि पृष्ठभूमि में यह किस क्वेरी से चलता है, दर्ज करें

alias list tables2

यह आपको पूर्वनिर्धारित के साथ थोड़ी अधिक जटिल क्वेरी दिखाएगा column एसक्यूएल * प्लस में आमतौर पर उपयोग की जाने वाली परिभाषाओं ।

जेफ स्मिथ यहाँ उपनामों के बारे में अधिक बताते हैं


1

मैं कॉलम आईडी के क्रम द्वारा क्रमबद्ध स्कीमा की तालिका से संबंधित सभी कॉलम नामों की एक सूची प्राप्त करना चाह रहा था।

यहाँ मैं जिस क्वेरी का उपयोग कर रहा हूं: -

SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;

1

दरअसल, एसक्यूएल क्वेश्चन के जरिए टेबल्स की लिस्ट रखना संभव है। ऐसा करना उन टूल्स के जरिए भी संभव है, जो डेटा डिक्शनरी की जेनरेशन जैसे ERWIN , टॉड डेटा मॉडलर या ERBuilder की अनुमति देते हैं । इन उपकरणों के साथ, टेबल के नाम के अलावा, आपके पास फ़ील्ड्स, उनके प्रकार, ऑब्जेक्ट्स जैसे (ट्रिगर, अनुक्रम, डोमेन, दृश्य) होंगे ...

अपनी तालिका परिभाषा बनाने के लिए निम्नलिखित चरणों का पालन करें:

  1. आपको अपने डेटाबेस को रिवर्स इंजीनियर करना होगा
    • टॉड डेटा मॉडलर में: मेनू -> फ़ाइल -> रिवर्स इंजीनियर -> रिवर्स इंजीनियरिंग विज़ार्ड
    • ERBuilder डेटा मॉडलर में: मेनू -> फ़ाइल -> रिवर्स इंजीनियर

आपके डेटाबेस को सॉफ़्टवेयर में इकाई संबंध चित्र के रूप में प्रदर्शित किया जाएगा।

  1. अपना डेटा शब्दकोश बनाएं जिसमें आपकी तालिका परिभाषा हो
    • टॉड डेटा मॉडलर में: मेनू -> मॉडल -> जनरेट रिपोर्ट -> भागो
    • ERBuilder डेटा मॉडलर में: मेनू -> टूल -> मॉडल प्रलेखन उत्पन्न करते हैं

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