इसमें सभी तालिकाओं के नाम प्रदर्शित करने के लिए मैं एक Oracle डेटाबेस को कैसे क्वेरी करूं?
इसमें सभी तालिकाओं के नाम प्रदर्शित करने के लिए मैं एक Oracle डेटाबेस को कैसे क्वेरी करूं?
जवाबों:
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
टेबल और समानार्थी शब्द को जोड़ती है और आपको यह नहीं बताती है कि कौन वस्तु का मालिक है।
क्वेरी user_tables
और dba_tables
काम नहीं किया।
यह एक किया:
select table_name from all_tables
एक कदम आगे जाने पर, एक और दृश्य होता है जिसे cols (all_tab_columns) कहा जाता है, जिसका उपयोग यह पता लगाने के लिए किया जा सकता है कि किस तालिका में दिए गए कॉलम का नाम है।
उदाहरण के लिए:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
ईएसटी से शुरू होने वाले सभी नामों को खोजने के लिए और कॉलम उनके नाम में कहीं भी CALLREF युक्त होते हैं।
यह काम करते समय मदद कर सकता है कि आप अपने कॉलम और नामकरण सम्मेलनों के आधार पर किन कॉलमों में शामिल होना चाहते हैं।
select * from cols
और 0 पंक्तियाँ लौटा दीं।
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;
यह कुछ ऐसा होना चाहिए जो काफी स्वीकार्य लगता है जैसे:
pagesize 30
रहे हैं pagesize 1000
?
वर्तमान उपयोगकर्ता के लिए तालिकाओं का चयन करने के लिए सरल क्वेरी:
SELECT table_name FROM user_tables;
नीचे दिए गए डेटा शब्दकोश दृश्यों का प्रयास करें।
tabs
dba_tables
all_tables
user_tables
User_tables से चयन करने का प्रयास करें जो वर्तमान उपयोगकर्ता के स्वामित्व वाली तालिकाओं को सूचीबद्ध करता है।
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
select * from dba_tables
सभी उपयोगकर्ताओं की सभी तालिकाएं केवल तभी देती हैं जब आपने जिस उपयोगकर्ता से लॉग इन किया था वह sysdba
विशेषाधिकार है।
मुझे जवाब नहीं मिला, जो उपयोग करने के लिए इंगित करेगा
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
इसलिए मेरे संस्करण को भी जोड़ने का फैसला किया। यह दृश्य वास्तव में अधिक है कि DBA_TABLES के रूप में यह वस्तु तालिकाओं के रूप में अच्छी तरह से ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ) देता है।
आप 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
हैं।
हम नीचे दिए गए क्वेरी से कॉलम विवरण सहित सभी टेबल प्राप्त कर सकते हैं:
SELECT * FROM user_tab_columns;
नीचे 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;
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
एसक्यूएल * प्लस में आमतौर पर उपयोग की जाने वाली परिभाषाओं ।
मैं कॉलम आईडी के क्रम द्वारा क्रमबद्ध स्कीमा की तालिका से संबंधित सभी कॉलम नामों की एक सूची प्राप्त करना चाह रहा था।
यहाँ मैं जिस क्वेरी का उपयोग कर रहा हूं: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
दरअसल, एसक्यूएल क्वेश्चन के जरिए टेबल्स की लिस्ट रखना संभव है। ऐसा करना उन टूल्स के जरिए भी संभव है, जो डेटा डिक्शनरी की जेनरेशन जैसे ERWIN , टॉड डेटा मॉडलर या ERBuilder की अनुमति देते हैं । इन उपकरणों के साथ, टेबल के नाम के अलावा, आपके पास फ़ील्ड्स, उनके प्रकार, ऑब्जेक्ट्स जैसे (ट्रिगर, अनुक्रम, डोमेन, दृश्य) होंगे ...
अपनी तालिका परिभाषा बनाने के लिए निम्नलिखित चरणों का पालन करें:
आपके डेटाबेस को सॉफ़्टवेयर में इकाई संबंध चित्र के रूप में प्रदर्शित किया जाएगा।
select * from all_all_tables
शुरुआत में यह अतिरिक्त 'सभी' अतिरिक्त 3 कॉलम देता है जो हैं:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(MySQL में किया गया) काम करता है?