Apakah SHOW TABLES(seperti yang dilakukan pada MySQL) berfungsi?
Martin Thoma
1
@MartinThoma tidak. mencobanya dulu, sebelum beralih ke Google
Adam Burley
Jawaban:
1364
SELECT owner, table_name
FROM dba_tables
Ini dengan asumsi bahwa Anda memiliki akses ke DBA_TABLEStampilan kamus data. Jika Anda tidak memiliki hak istimewa itu tetapi membutuhkannya, Anda dapat meminta DBA secara eksplisit memberi Anda hak istimewa pada tabel itu, atau, bahwa DBA memberi Anda SELECT ANY DICTIONARYhak istimewa atau SELECT_CATALOG_ROLEperan (yang keduanya memungkinkan Anda untuk menanyakan tabel kamus data apa pun) ). Tentu saja, Anda mungkin ingin mengecualikan skema tertentu seperti SYSdan SYSTEMyang memiliki banyak tabel Oracle yang mungkin tidak Anda pedulikan.
Atau, jika Anda tidak memiliki akses ke DBA_TABLES, Anda dapat melihat semua tabel yang memiliki akses akun Anda melalui ALL_TABLEStampilan:
SELECT owner, table_name
FROM all_tables
Meskipun, itu mungkin subset dari tabel yang tersedia di database (ALL_TABLES menunjukkan kepada Anda informasi untuk semua tabel yang telah diberikan akses oleh pengguna Anda).
Jika Anda hanya mementingkan tabel yang Anda miliki, bukan tabel yang bisa Anda akses, Anda bisa menggunakan USER_TABLES:
SELECT table_name
FROM user_tables
Karena USER_TABLEShanya memiliki informasi tentang tabel yang Anda miliki, itu tidak memiliki OWNERkolom - pemiliknya, menurut definisi, adalah Anda.
Oracle juga memiliki sejumlah data warisan kamus views-- TAB, DICT, TABS, dan CATuntuk misalnya-- yang dapat digunakan. Secara umum, saya tidak akan menyarankan menggunakan tampilan warisan ini kecuali jika Anda benar-benar perlu untuk membuat cadangan skrip Anda ke Oracle 6. Oracle tidak mengubah pandangan ini dalam waktu yang lama sehingga mereka sering mengalami masalah dengan jenis objek yang lebih baru. Misalnya, TABdan CATtampilan keduanya menampilkan informasi tentang tabel yang ada di tempat sampah pengguna sementara [DBA|ALL|USER]_TABLEStampilan semua memfilternya. CATjuga menunjukkan informasi tentang log tampilan terwujud dengan TABLE_TYPE"TABEL" yang tidak mungkin apa yang Anda inginkan. DICTmenggabungkan tabel dan sinonim dan tidak memberi tahu Anda siapa yang memiliki objek.
Saya mendapat pengecualian "ORA-00942: tabel atau tampilan tidak ada"
vitule
46
Maka Anda belum diberi izin untuk melihat semua tabel dalam database. Anda dapat meminta tampilan kamus data ALL_TABLES untuk melihat semua tabel yang diizinkan untuk Anda akses, yang mungkin merupakan subset kecil dari tabel dalam database.
Justin Cave
Kesalahan sederhana jika bukan pengguna sqlplus sehari-hari: tambahkan semi-colon akhir (';') jika Anda tidak mendapatkan hasil dengan perintah di atas :).
Gimhani
Perhatikan bahwa pada Oracle 12c, ada kolom di kamus data dba_users untuk membantu menghapus tabel sistem dari hasil yang Anda set. Query lengkapnya adalah SELECT owner, table_name dari dba_tables yang pemiliknya tidak ada (pilih username dari dba_users di mana oracle_maintained = 'Y')
saritonin
181
Meminta user_tablesdan dba_tablestidak bekerja.
Yang ini:
@LimitedAtonement Maaf, itu salah. Tampilan disebut user_tables, bukan user_table. Jika user_tables tidak berfungsi untuk vitule, sesuatu yang lain salah.
Frank Schmitt
67
Selangkah lebih maju, ada tampilan lain yang disebut cols (all_tab_columns) yang dapat digunakan untuk memastikan tabel mana yang berisi nama kolom yang diberikan.
Sebagai contoh:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE'EST%'AND column_name LIKE'%CALLREF%';
untuk menemukan semua tabel yang memiliki nama yang dimulai dengan EST dan kolom yang berisi CALLREF di mana saja dalam nama mereka.
Ini dapat membantu saat menentukan kolom yang ingin Anda gabungkan, misalnya, tergantung pada konvensi penamaan tabel dan kolom Anda.
Saya lakukan select * from colsdan mendapat 0 baris dikembalikan.
Gabe
50
Untuk tampilan yang lebih baik bersama sqlplus
Jika Anda menggunakan, sqlplusAnda mungkin ingin terlebih dahulu menyiapkan beberapa parameter untuk tampilan yang lebih baik jika kolom Anda menjadi berantakan (variabel-variabel ini tidak akan bertahan setelah Anda keluar dari sqlplussesi Anda ):
set colsep '|'set linesize 167set pagesize 30set pagesize 1000
Tampilkan Semua Tabel
Anda kemudian dapat menggunakan sesuatu seperti ini untuk melihat semua nama tabel:
SELECT table_name, owner, tablespace_name FROM all_tables;
Tampilkan Tabel yang Anda Miliki
Seperti @Justin Cave menyebutkan, Anda dapat menggunakan ini untuk hanya menampilkan tabel yang Anda miliki:
SELECT table_name FROM user_tables;
Jangan Lupakan Tampilan
Ingatlah bahwa beberapa "tabel" mungkin sebenarnya adalah "tampilan" sehingga Anda juga dapat mencoba menjalankan sesuatu seperti:
SELECT view_name FROM all_views;
Hasil
Ini akan menghasilkan sesuatu yang terlihat cukup dapat diterima seperti:
SELECTDISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE ='TABLE'AND OWNER='SOME_SCHEMA_NAME';SELECTDISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE ='TABLE'AND OWNER='SOME_SCHEMA_NAME';
Itu sebenarnya tidak benar. SYSDBA tidak diperlukan. Anda bisa mendapatkan akses ke DBA_TABLES dengan banyak cara. 1.) Hibah langsung pada objek ke pengguna oleh SYS. 2.) Berikan PILIHAN KELEBIHAN KHUSUS kepada pengguna. 3.) Memberikan peran SELECT_CATALOG_ROLE.
Di bawah ini adalah potongan komentar dari pertanyaan SQL yang menjelaskan bagaimana opsi yang dapat Anda manfaatkan:
-- need to have select catalog roleSELECT*FROM dba_tables;-- to see tables of your schemaSELECT*FROM user_tables;-- tables inside your schema and tables of other schema which you possess select grants onSELECT*FROM all_tables;
Fitur baru yang tersedia di SQLcl (yang merupakan antarmuka baris perintah gratis untuk Oracle Database) adalah
Tables alias.
Berikut adalah beberapa contoh yang menunjukkan penggunaan dan aspek tambahan dari fitur ini. Pertama, sambungkan ke sesi sqlbaris perintah ( sql.exedi windows). Disarankan untuk memasukkan perintah khusus sqlcl ini sebelum menjalankan perintah atau pertanyaan lain yang menampilkan data.
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
..
Untuk mengetahui apa yang dimaksud tablesalias, Anda cukup menggunakanalias list <alias>
SQL> alias list tables
tables - tables <schema>- show tables fromschema--------------------------------------------------select table_name "TABLES"from user_tables
Anda tidak harus mendefinisikan alias ini karena secara default ada di bawah SQLcl. Jika Anda ingin membuat daftar tabel dari skema tertentu, menggunakan alias yang ditentukan pengguna baru dan meneruskan nama skema sebagai argumen mengikat dengan hanya satu set kolom yang ditampilkan, Anda dapat melakukannya dengan menggunakan
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Setelah itu Anda dapat dengan mudah memberikan nama skema sebagai argumen
Untuk mengetahui permintaan apa yang dijalankan di latar belakang, masukkan
alias list tables2
Ini akan menunjukkan kepada Anda pertanyaan yang sedikit lebih rumit bersama dengan columndefinisi yang telah ditetapkan yang biasa digunakan dalam SQL * Plus.
Jeff Smith menjelaskan lebih lanjut tentang alias di sini
Memang, adalah mungkin untuk memiliki daftar tabel melalui query SQL. Hal ini dimungkinkan juga melalui alat-alat yang memungkinkan pembuatan kamus data, seperti ERWIN , Toad Data Modeler atau ERBuilder . Dengan alat ini, selain nama tabel, Anda akan memiliki bidang, tipenya, objek seperti (pemicu, urutan, domain, tampilan ...)
Berikut langkah-langkah yang harus diikuti untuk menghasilkan definisi tabel Anda:
Anda harus merekayasa balik basis data Anda
Dalam pemodel data Toad: Menu -> File -> reverse engineer -> reverse engineering wizard
Dalam pemodel data ERBuilder: Menu -> File -> reverse engineer
Database Anda akan ditampilkan dalam perangkat lunak sebagai diagram Hubungan Entitas.
Hasilkan kamus data Anda yang akan berisi definisi Tabel Anda
Di pemodel data Toad: Menu -> Model -> Hasilkan laporan -> Jalankan
Dalam pemodel data ERBuilder: Menu -> Alat -> buat dokumentasi model
SHOW TABLES
(seperti yang dilakukan pada MySQL) berfungsi?Jawaban:
Ini dengan asumsi bahwa Anda memiliki akses ke
DBA_TABLES
tampilan kamus data. Jika Anda tidak memiliki hak istimewa itu tetapi membutuhkannya, Anda dapat meminta DBA secara eksplisit memberi Anda hak istimewa pada tabel itu, atau, bahwa DBA memberi AndaSELECT ANY DICTIONARY
hak istimewa atauSELECT_CATALOG_ROLE
peran (yang keduanya memungkinkan Anda untuk menanyakan tabel kamus data apa pun) ). Tentu saja, Anda mungkin ingin mengecualikan skema tertentu sepertiSYS
danSYSTEM
yang memiliki banyak tabel Oracle yang mungkin tidak Anda pedulikan.Atau, jika Anda tidak memiliki akses ke
DBA_TABLES
, Anda dapat melihat semua tabel yang memiliki akses akun Anda melaluiALL_TABLES
tampilan:Meskipun, itu mungkin subset dari tabel yang tersedia di database (
ALL_TABLES
menunjukkan kepada Anda informasi untuk semua tabel yang telah diberikan akses oleh pengguna Anda).Jika Anda hanya mementingkan tabel yang Anda miliki, bukan tabel yang bisa Anda akses, Anda bisa menggunakan
USER_TABLES
:Karena
USER_TABLES
hanya memiliki informasi tentang tabel yang Anda miliki, itu tidak memilikiOWNER
kolom - pemiliknya, menurut definisi, adalah Anda.Oracle juga memiliki sejumlah data warisan kamus views--
TAB
,DICT
,TABS
, danCAT
untuk misalnya-- yang dapat digunakan. Secara umum, saya tidak akan menyarankan menggunakan tampilan warisan ini kecuali jika Anda benar-benar perlu untuk membuat cadangan skrip Anda ke Oracle 6. Oracle tidak mengubah pandangan ini dalam waktu yang lama sehingga mereka sering mengalami masalah dengan jenis objek yang lebih baru. Misalnya,TAB
danCAT
tampilan keduanya menampilkan informasi tentang tabel yang ada di tempat sampah pengguna sementara[DBA|ALL|USER]_TABLES
tampilan semua memfilternya.CAT
juga menunjukkan informasi tentang log tampilan terwujud denganTABLE_TYPE
"TABEL" yang tidak mungkin apa yang Anda inginkan.DICT
menggabungkan tabel dan sinonim dan tidak memberi tahu Anda siapa yang memiliki objek.sumber
Meminta
user_tables
dandba_tables
tidak bekerja.Yang ini:
sumber
Selangkah lebih maju, ada tampilan lain yang disebut cols (all_tab_columns) yang dapat digunakan untuk memastikan tabel mana yang berisi nama kolom yang diberikan.
Sebagai contoh:
untuk menemukan semua tabel yang memiliki nama yang dimulai dengan EST dan kolom yang berisi CALLREF di mana saja dalam nama mereka.
Ini dapat membantu saat menentukan kolom yang ingin Anda gabungkan, misalnya, tergantung pada konvensi penamaan tabel dan kolom Anda.
sumber
select * from cols
dan mendapat 0 baris dikembalikan.Untuk tampilan yang lebih baik bersama
sqlplus
Jika Anda menggunakan,
sqlplus
Anda mungkin ingin terlebih dahulu menyiapkan beberapa parameter untuk tampilan yang lebih baik jika kolom Anda menjadi berantakan (variabel-variabel ini tidak akan bertahan setelah Anda keluar darisqlplus
sesi Anda ):Tampilkan Semua Tabel
Anda kemudian dapat menggunakan sesuatu seperti ini untuk melihat semua nama tabel:
Tampilkan Tabel yang Anda Miliki
Seperti @Justin Cave menyebutkan, Anda dapat menggunakan ini untuk hanya menampilkan tabel yang Anda miliki:
Jangan Lupakan Tampilan
Ingatlah bahwa beberapa "tabel" mungkin sebenarnya adalah "tampilan" sehingga Anda juga dapat mencoba menjalankan sesuatu seperti:
Hasil
Ini akan menghasilkan sesuatu yang terlihat cukup dapat diterima seperti:
sumber
pagesize 30
denganpagesize 1000
?Permintaan sederhana untuk memilih tabel untuk pengguna saat ini:
sumber
----------------ATAU------------------
----------------ATAU------------------
sumber
Coba tampilan kamus data di bawah ini.
sumber
Coba pilih dari user_tables yang berisi daftar tabel yang dimiliki oleh pengguna saat ini.
sumber
Database Oracle untuk menampilkan nama semua tabel menggunakan kueri di bawah ini
kunjungi lebih lanjut: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
sumber
Dengan semua itu, Anda dapat memilih:
sumber
memberikan semua tabel dari semua pengguna hanya jika pengguna yang Anda masuki memiliki
sysdba
hak istimewa.sumber
Saya tidak menemukan jawaban yang akan digunakan
jadi memutuskan untuk menambahkan versi saya juga. Tampilan ini sebenarnya mengembalikan lebih banyak dari DBA_TABLES karena mengembalikan tabel objek juga ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
sumber
Anda dapat menggunakan Kamus Data Oracle untuk mendapatkan informasi tentang objek oracle.
Anda bisa mendapatkan daftar tabel dengan berbagai cara:
atau misalnya:
Kemudian Anda bisa mendapatkan kolom tabel menggunakan nama tabel:
Kemudian Anda bisa mendapatkan daftar dependensi (pemicu, tampilan, dll.):
Kemudian Anda bisa mendapatkan sumber teks dari objek ini:
Dan Anda dapat menggunakan
USER
atauALL
melihat alih-alihDBA
jika Anda mau.sumber
Termasuk tampilan:
sumber
Kami bisa mendapatkan semua tabel termasuk detail kolom dari kueri di bawah ini:
sumber
Di bawah ini adalah potongan komentar dari pertanyaan SQL yang menjelaskan bagaimana opsi yang dapat Anda manfaatkan:
sumber
Kueri berikut hanya mencantumkan data yang diperlukan, sedangkan jawaban lain memberi saya data tambahan yang hanya membingungkan saya.
sumber
Fitur baru yang tersedia di SQLcl (yang merupakan antarmuka baris perintah gratis untuk Oracle Database) adalah
Tables
alias.Berikut adalah beberapa contoh yang menunjukkan penggunaan dan aspek tambahan dari fitur ini. Pertama, sambungkan ke sesi
sql
baris perintah (sql.exe
di windows). Disarankan untuk memasukkan perintah khusus sqlcl ini sebelum menjalankan perintah atau pertanyaan lain yang menampilkan data.SQL> tables
Untuk mengetahui apa yang dimaksud
tables
alias, Anda cukup menggunakanalias list <alias>
Anda tidak harus mendefinisikan alias ini karena secara default ada di bawah SQLcl. Jika Anda ingin membuat daftar tabel dari skema tertentu, menggunakan alias yang ditentukan pengguna baru dan meneruskan nama skema sebagai argumen mengikat dengan hanya satu set kolom yang ditampilkan, Anda dapat melakukannya dengan menggunakan
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Setelah itu Anda dapat dengan mudah memberikan nama skema sebagai argumen
SQL> tables_schema HR
Alias yang didefinisikan lebih canggih dikenal sebagai
Tables2
, yang menampilkan beberapa kolom lainnya.Untuk mengetahui permintaan apa yang dijalankan di latar belakang, masukkan
Ini akan menunjukkan kepada Anda pertanyaan yang sedikit lebih rumit bersama dengan
column
definisi yang telah ditetapkan yang biasa digunakan dalam SQL * Plus.Jeff Smith menjelaskan lebih lanjut tentang alias di sini
sumber
Saya sedang mencari untuk mendapatkan daftar semua nama kolom milik tabel skema yang diurutkan berdasarkan urutan id kolom.
Inilah pertanyaan yang saya gunakan: -
sumber
Memang, adalah mungkin untuk memiliki daftar tabel melalui query SQL. Hal ini dimungkinkan juga melalui alat-alat yang memungkinkan pembuatan kamus data, seperti ERWIN , Toad Data Modeler atau ERBuilder . Dengan alat ini, selain nama tabel, Anda akan memiliki bidang, tipenya, objek seperti (pemicu, urutan, domain, tampilan ...)
Berikut langkah-langkah yang harus diikuti untuk menghasilkan definisi tabel Anda:
Database Anda akan ditampilkan dalam perangkat lunak sebagai diagram Hubungan Entitas.
sumber
tambahan 'semua' ini di awal memberikan 3 kolom tambahan yaitu:
sumber