Oracle'daki tüm tabloların listesi alınsın mı?


1102

Bir Oracle veritabanını içindeki tüm tabloların adlarını görüntülemek için nasıl sorgulayabilirim?


1
SHOW TABLES( MySQL'de olduğu gibi) çalışıyor mu?
Martin Thoma

1
@MartinThoma hayır. Google'a başvurmadan önce bunu denedim
Adam Burley

Yanıtlar:


1364
SELECT owner, table_name
  FROM dba_tables

Bu, DBA_TABLESveri sözlüğü görünümüne erişiminiz olduğunu varsayar . Bu ayrıcalıklara sahip değilseniz, ancak bunlara ihtiyacınız varsa, DBA'nın size bu tabloda açıkça ayrıcalıklar vermesini SELECT ANY DICTIONARYveya DBA'nın size ayrıcalık veya SELECT_CATALOG_ROLErol vermesini isteyebilirsiniz (her ikisi de herhangi bir veri sözlüğü tablosunu sorgulamanıza izin verir) ). Tabii ki, gibi belirli şemaları dışlamak isteyebilir SYSve SYSTEMmuhtemelen umurumda değil bu, Oracle tabloları çok sayıda var.

Alternatif olarak, erişiminiz DBA_TABLESyoksa, hesabınızın eriştiği tüm tabloları ALL_TABLESgörünüm üzerinden görebilirsiniz:

SELECT owner, table_name
  FROM all_tables

Bununla birlikte, bu, veritabanında bulunan tabloların bir alt kümesi olabilir ( ALL_TABLESkullanıcılarınıza erişim izni verilen tüm tabloların bilgilerini gösterir).

Yalnızca sahip olduğunuz tablolarla ilgileniyorsanız, erişiminiz olanlarla değil, aşağıdakileri kullanabilirsiniz USER_TABLES:

SELECT table_name
  FROM user_tables

Yana USER_TABLESsadece sahibi olduğu tablolar hakkında bilgiler, bir yok OWNERtanımı gereği, sensin, sahibi - sütunu.

Oracle da eski verilerin bir dizi Sözlük views-- vardır TAB, DICT, TABS, ve CATo sonra, örneğin için kullanılabilir. Genel olarak, komut dosyalarınızı Oracle 6'ya kesinlikle yüklemeniz gerekmedikçe bu eski görünümleri kullanmanızı önermem. Oracle bu görünümleri uzun zamandır değiştirmedi, bu nedenle genellikle daha yeni nesne türleriyle ilgili sorunlar yaşıyorlar. Örneğin, TABve CATgörünümlerinin her ikisi de kullanıcının geri dönüşüm kutusundaki tablolarla ilgili bilgileri gösterirken, [DBA|ALL|USER]_TABLESgörünümlerin tümü bunları filtreler. CATayrıca, TABLE_TYPEgerçekten istediğiniz gibi görünmesi mümkün olmayan "TABLO" ile malzeme görünümü günlükleri hakkında bilgi gösterir . DICTtabloları ve eş anlamlıları birleştirir ve nesnenin sahibi kim olduğunu söylemez.


9
Bir istisna alıyorum "ORA-00942: tablo veya görünüm yok"
vitule

46
O zaman veritabanındaki tüm tabloları görmenize izin verilmedi. Veritabanındaki tabloların küçük bir alt kümesi olabilecek, erişmenize izin verilen tüm tabloları görmek için ALL_TABLES veri sözlüğü görünümünü sorgulayabilirsiniz.
Justin Cave

Günlük sqlplus kullanıcısı değilse basit bir hata: u sadece yukarıdaki komutlarla sonuç alamıyorsanız, bitiş noktalı virgülünü (';') ekleyin :).
Gimhani

Oracle 12c'den itibaren, dba_users veri sözlüğünde, sistem tablolarını sonuç kümenizden kaldırmanıza yardımcı olacak bir sütun olduğunu unutmayın. Sorgunun tamamı, sahibi olmayan dba_tables'dan SELECT sahibi, tablo_adı olacaktır (oracle_maintained = 'Y' burada dba_users'den kullanıcı adını seçin)
saritonin

181

Sorgulama user_tablesve dba_tablesişe yaramadı.
Bunu yaptı:

select table_name from all_tables  

14
@LimitedAtonement Üzgünüm, bu tamamen yanlış. Görünüm user_tables olarak adlandırılır, user_table olarak adlandırılmaz. User_tables vitule için çalışmadıysa, başka bir şey yanlıştı.
Frank Schmitt

67

Bir adım daha ileri gidersek, hangi tabloların belirli bir sütun adı içerdiğini belirlemek için kullanılabilen cols (all_tab_columns) adı verilen başka bir görünüm vardır.

Örneğin:

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

EST ile başlayan bir ada sahip tüm tabloları ve adlarında herhangi bir yerde CALLREF içeren sütunları bulmak için.

Bu, örneğin, tablonuza ve sütun adlandırma kurallarınıza bağlı olarak hangi sütunlara katılmak istediğiniz üzerinde çalışırken yardımcı olabilir.


4
Yaptım select * from colsve 0 satır döndüm.
Gabe

50

İle daha iyi görüntüleme için sqlplus

Kullanıyorsanız sqlplus, sütunlarınız karıştırılıyorsa daha güzel görüntüleme için birkaç parametre ayarlamak isteyebilirsiniz ( sqlplusoturumunuzdan çıktıktan sonra bu değişkenler devam etmemelidir ):

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

Tüm Tabloları Göster

Daha sonra tüm tablo adlarını görmek için böyle bir şey kullanabilirsiniz:

SELECT table_name, owner, tablespace_name FROM all_tables;

Sahip Olduğunuz Tabloları Göster

@Justin Cave'den bahsedildiği gibi, bunu yalnızca sahibi olduğunuz tabloları göstermek için kullanabilirsiniz:

SELECT table_name FROM user_tables;

Görüntülemeleri Unutma

Bazı "tabloların" aslında "görünümler" olabileceğini unutmayın.

SELECT view_name FROM all_views;

Sonuçlar

Bu, aşağıdaki gibi oldukça kabul edilebilir bir şey vermelidir:

sonuç


8
"Daha iyi görüntüleme" tavsiye için teşekkürler ama overwritting değil pagesize 30ile pagesize 1000?
Pablo Recalde

22

Geçerli kullanıcı için tabloları seçmek için basit sorgu:

  SELECT table_name FROM user_tables;

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

----------------VEYA------------------

    select * from tab;

----------------VEYA------------------

    select table_name from user_tables;




8

Bunlardan herhangi biriyle şunları seçebilirsiniz:

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

tüm kullanıcıların tüm tablolarını yalnızca oturum açtığınız kullanıcı sysdbaayrıcalıklara sahipse verir .


4
Aslında bu doğru değil. SYSDBA gerekli değildir. DBA_TABLES'a birçok yoldan erişebilirsiniz. 1.) Nesneye SYS tarafından doğrudan hibe verilmesi. 2.) kullanıcıya SÖZLÜ HERHANGİ BİR ayrıcalık SEÇİN. 3.) SELECT_CATALOG_ROLE rolünün verilmesi.
Mark J. Bobak


4

Oracle Veri Sözlüğü'nü oracle nesneleri hakkında bilgi almak için kullanabilirsiniz .

Tabloların listesini farklı şekillerde alabilirsiniz:

select * 
from dba_tables

veya örneğin:

select * 
from dba_objects 
where object_type = 'TABLE' 

Ardından tablo adını kullanarak tablo sütunları alabilirsiniz:

select * 
from dba_tab_columns

Sonra bağımlılıkların listesini (tetikleyiciler, görünümler vb.) Alabilirsiniz:

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

Sonra bu nesnelerin metin kaynağını alabilirsiniz:

select * from dba_source

İsterseniz yerine USERveya ALLgörünümleri de kullanabilirsiniz DBA.


4

Görünümler dahil:

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

4

Sütun detayları dahil tüm tabloları aşağıdaki sorgudan alabiliriz:

SELECT * FROM user_tab_columns;

4

Aşağıda, seçeneklerden nasıl yararlanabileceğinizi açıklayan SQL sorgularının açıklanmış bir snippet'i bulunmaktadır:

-- 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

Aşağıdaki sorgu sadece gerekli verileri listelerken, diğer cevaplar bana sadece kafamı karıştıran fazladan veri verdi.

select table_name from user_tables;

2

SQLcl'de bulunan yeni bir özellik (Oracle Database için ücretsiz bir komut satırı arayüzü)

Tables takma.

Özelliğin kullanımını ve ek yönlerini gösteren birkaç örnek. İlk olarak, bir sqlkomut satırı ( sql.exepencerelerde) oturumuna bağlanın . Verileri görüntüleyen diğer komutları veya sorguları çalıştırmadan önce bu sqlcl'a özgü komutu girmeniz önerilir.

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
..

tablesTakma adın ne anlama geldiğini bilmek için şunu kullanabilirsiniz:alias list <alias>

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

 select table_name "TABLES" from user_tables

Bu diğer adı SQLcl altında varsayılan olarak olduğu gibi tanımlamanız gerekmez. Belirli bir şemadaki tabloları listelemek, yeni bir kullanıcı tanımlı takma ad kullanarak ve yalnızca bir dizi sütun görüntülenen bir bağlama bağımsız değişkeni olarak şema adı kullanarak, bunu kullanarak

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

Bundan sonra şema adını bağımsız değişken olarak iletebilirsiniz

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
..
..

Tables2Diğer birçok sütunu görüntüleyen daha karmaşık, önceden tanımlanmış bir takma ad olarak bilinir .

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

Arka planda hangi sorgunun çalıştığını bilmek için şunu girin:

alias list tables2

Bu, columnSQL * Plus'ta yaygın olarak kullanılan önceden tanımlanmış tanımlarla birlikte biraz daha karmaşık bir sorgu gösterecektir .

Jeff Smith burada takma adlar hakkında daha fazla açıklama yapıyor


1

Sütun kimliği sırasına göre sıralanmış bir şema tablosuna ait tüm sütun adlarının bir listesini almak için bakıyordu.

İşte kullanıyorum sorgu: -

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

1

Gerçekten de, tablolar listesini SQL sorguları üzerinden almak mümkündür. ERWIN , Toad Data Modeler veya ERBuilder gibi veri sözlüklerinin oluşturulmasına izin veren araçlar aracılığıyla bunu yapmak mümkündür . Bu araçlarla, tablo adlarına ek olarak, alanlar, türleri, gibi nesneler (tetikleyiciler, sıralar, etki alanı, görünümler ...)

Tablo tanımınızı oluşturmak için aşağıdaki adımları izleyin:

  1. Veritabanınızı tersine çevirmeniz gerekiyor
    • Kurbağa veri değiştiricisinde: Menü -> Dosya -> tersine mühendis -> tersine mühendislik sihirbazı
    • ERBuilder veri değiştiricisinde: Menü -> Dosya -> tersine mühendislik

Veritabanınız yazılımda bir Varlık İlişkisi diyagramı olarak görüntülenir.

  1. Tablolar tanımınızı içerecek veri sözlüğünüzü oluşturun
    • Kurbağa veri değiştiricisinde: Menü -> Model -> Rapor oluştur -> Çalıştır
    • ERBuilder veri değiştiricisinde: Menü -> Araç -> model belgeleri oluştur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.