Oracle SQL'deki bir şemadaki tüm tabloları nasıl listeleyebilirim?
Oracle SQL'deki bir şemadaki tüm tabloları nasıl listeleyebilirim?
Yanıtlar:
Başka bir şemadaki tüm tabloları görmek için, aşağıdaki sistem ayrıcalıklarından birine veya daha fazlasına sahip olmanız gerekir:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
veya büyük çekiç, DBA rolü.
Bunlardan herhangi biriyle şunları seçebilirsiniz:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Bu sistem ayrıcalıkları olmadan, doğrudan veya bir rol aracılığıyla yalnızca size belirli düzeyde erişim izni verilen tabloları görebilirsiniz.
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Son olarak, tablolarınıza ilişkin haklarınız iptal edilemediğinden (10 g'dan itibaren) kendi tablolarınız için veri sözlüğünü her zaman sorgulayabilirsiniz:
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
DISTINCTSorguda kesinlikle gerek yoktur . owner, object_namebenzersizdirALL_OBJECTS
owner, object_namedba_objects'teki hiçbir yöntemle benzersiz değildir; Paket Gövdeleri ve Paketler bu görünümde görünür ve Tablolar ve Dizinler farklı ad alanlarındadır.
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
Sorgulayabilirsiniz USER_TABLES
select TABLE_NAME from user_tables
Bunu dene, değiştir? şema adınızla
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
Oracle'a JDBC (Java) ile erişiyorsanız DatabaseMetadata sınıfını kullanabilirsiniz . Oracle'a ADO.NET ile erişiyorsanız benzer bir yaklaşım kullanabilirsiniz.
Oracle'a ODBC ile erişiyorsanız, SQLTables işlevini kullanabilirsiniz .
Aksi takdirde, SQLPlus veya benzeri bir Oracle istemcisindeki bilgilere ihtiyacınız varsa, daha önce bahsedilen sorgulardan biri olacaktır. Örneğin:
select TABLE_NAME from user_tables
select * from cat;
user_catalog şema cat eşanlamındaki tüm tabloları gösterecektir
Sahip adını biliyorsanız doğrudan ikinci sorguyu çalıştırabilirsiniz.
- İlk önce orada bulunan tüm SAHİPLERİNİ seçebilirsiniz:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
- Daha sonra bu sahibin altındaki tabloları görebilirsiniz:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
Db şeması hakkında bazı bilgiler göstermek için benim basit yardımcı programına bakın . Aşağıdakilere dayanmaktadır: Oracle Veri Sözlüğünü Kullanarak Veri Modelini Tersine Mühendislik
Tablonun boyutunu da almanız gerekiyorsa, bu kullanışlı olacaktır:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
OWNERŞema altındaki tüm tablolar için tablonun ve satır sayacının adı :
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
%_OBJECTSbunun yerine kullanımı dışında "en eksiksiz cevap"%_TABLES.