Bir Oracle veritabanını içindeki tüm tabloların adlarını görüntülemek için nasıl sorgulayabilirim?
Bir Oracle veritabanını içindeki tüm tabloların adlarını görüntülemek için nasıl sorgulayabilirim?
Yanıtlar:
SELECT owner, table_name
FROM dba_tables
Bu, DBA_TABLES
veri 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 DICTIONARY
veya DBA'nın size ayrıcalık veya SELECT_CATALOG_ROLE
rol vermesini isteyebilirsiniz (her ikisi de herhangi bir veri sözlüğü tablosunu sorgulamanıza izin verir) ). Tabii ki, gibi belirli şemaları dışlamak isteyebilir SYS
ve SYSTEM
muhtemelen umurumda değil bu, Oracle tabloları çok sayıda var.
Alternatif olarak, erişiminiz DBA_TABLES
yoksa, hesabınızın eriştiği tüm tabloları ALL_TABLES
gö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_TABLES
kullanı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_TABLES
sadece sahibi olduğu tablolar hakkında bilgiler, bir yok OWNER
tanımı gereği, sensin, sahibi - sütunu.
Oracle da eski verilerin bir dizi Sözlük views-- vardır TAB
, DICT
, TABS
, ve CAT
o 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, TAB
ve CAT
görünümlerinin her ikisi de kullanıcının geri dönüşüm kutusundaki tablolarla ilgili bilgileri gösterirken, [DBA|ALL|USER]_TABLES
görünümlerin tümü bunları filtreler. CAT
ayrıca, TABLE_TYPE
gerç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 . DICT
tabloları ve eş anlamlıları birleştirir ve nesnenin sahibi kim olduğunu söylemez.
Sorgulama user_tables
ve dba_tables
işe yaramadı.
Bunu yaptı:
select table_name from all_tables
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.
select * from cols
ve 0 satır döndüm.
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 ( sqlplus
oturumunuzdan çıktıktan sonra bu değişkenler devam etmemelidir ):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
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;
@Justin Cave'den bahsedildiği gibi, bunu yalnızca sahibi olduğunuz tabloları göstermek için kullanabilirsiniz:
SELECT table_name FROM user_tables;
Bazı "tabloların" aslında "görünümler" olabileceğini unutmayın.
SELECT view_name FROM all_views;
Bu, aşağıdaki gibi oldukça kabul edilebilir bir şey vermelidir:
pagesize 30
ile pagesize 1000
?
Geçerli kullanıcı için tabloları seçmek için basit sorgu:
SELECT table_name FROM user_tables;
Aşağıdaki veri sözlüğü görünümlerini deneyin.
tabs
dba_tables
all_tables
user_tables
Geçerli kullanıcının sahip olduğu tabloları listeleyen user_tables arasından seçim yapmayı deneyin .
Oracle veritabanı aşağıdaki sorguyu kullanarak tüm tabloların adlarını görüntülemek için
SELECT sahibi, tablo_adı FROM dba_tables; SELECT sahibi, tablo_adı FROM all_tables; Tablo_adı FROM kullanıcı_tablolarını SEÇ;
daha fazla ziyaret edin : http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
tüm kullanıcıların tüm tablolarını yalnızca oturum açtığınız kullanıcı sysdba
ayrıcalıklara sahipse verir .
Kullanacağım bir cevap bulamadım
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
bu yüzden versiyonumu da eklemeye karar verdim. Bu görünüm aslında nesne tablolarını döndürdüğü için DBA_TABLES'ten daha fazlasını döndürür ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
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 USER
veya ALL
görünümleri de kullanabilirsiniz DBA
.
Sütun detayları dahil tüm tabloları aşağıdaki sorgudan alabiliriz:
SELECT * FROM user_tab_columns;
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;
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 sql
komut satırı ( sql.exe
pencerelerde) 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
..
tables
Takma 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
..
..
Tables2
Diğ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, column
SQL * 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
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;
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:
Veritabanınız yazılımda bir Varlık İlişkisi diyagramı olarak görüntülenir.
select * from all_all_tables
başlangıçta bu ek 'tümü' fazladan 3 sütun verir:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
( MySQL'de olduğu gibi) çalışıyor mu?