Come si esegue una query su un database Oracle per visualizzare i nomi di tutte le tabelle in esso?
Come si esegue una query su un database Oracle per visualizzare i nomi di tutte le tabelle in esso?
Risposte:
SELECT owner, table_name
FROM dba_tables
Ciò presuppone che tu abbia accesso alla DBA_TABLES
vista del dizionario dei dati. Se non disponi di tali privilegi ma ne hai bisogno, puoi richiedere che il DBA ti conceda esplicitamente i privilegi su quella tabella o che il DBA ti conceda il SELECT ANY DICTIONARY
privilegio o il SELECT_CATALOG_ROLE
ruolo (uno dei quali ti consentirebbe di interrogare qualsiasi tabella del dizionario dati ). Naturalmente, potresti voler escludere alcuni schemi simili SYS
e SYSTEM
che hanno un gran numero di tabelle Oracle che probabilmente non ti interessano.
In alternativa, se non hai accesso DBA_TABLES
, puoi visualizzare tutte le tabelle a cui il tuo account ha accesso tramite la ALL_TABLES
vista:
SELECT owner, table_name
FROM all_tables
Tuttavia, potrebbe trattarsi di un sottoinsieme delle tabelle disponibili nel database (ALL_TABLES
mostra le informazioni per tutte le tabelle a cui è stato concesso l'accesso all'utente).
Se ti preoccupi solo delle tabelle che possiedi, non di quelle a cui hai accesso, puoi utilizzare USER_TABLES
:
SELECT table_name
FROM user_tables
Dato USER_TABLES
che contiene solo informazioni sulle tabelle che possiedi, non ha una OWNER
colonna: il proprietario, per definizione, sei tu.
Oracle ha anche una serie di dati legacy dizionario views-- TAB
, DICT
, TABS
, e CAT
per example-- che potrebbe essere utilizzato. In generale, non suggerirei di utilizzare queste viste legacy a meno che non sia assolutamente necessario eseguire il backport degli script su Oracle 6. Oracle non ha modificato queste viste da molto tempo, quindi spesso hanno problemi con i nuovi tipi di oggetti. Ad esempio, le viste TAB
e CAT
mostrano entrambe le informazioni sulle tabelle che si trovano nel cestino dell'utente mentre le [DBA|ALL|USER]_TABLES
viste tutte le filtrano. CAT
mostra anche informazioni sui registri di visualizzazione materializzati con una TABLE_TYPE
"TABELLA" che è improbabile che sia ciò che desideri veramente. DICT
combina tabelle e sinonimi e non ti dice chi possiede l'oggetto.
Interrogazione user_tables
e dba_tables
non ha funzionato.
Questo ha fatto:
select table_name from all_tables
Andando oltre, c'è un'altra vista chiamata cols (all_tab_columns) che può essere usata per accertare quali tabelle contengono un determinato nome di colonna.
Per esempio:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
per trovare tutte le tabelle che hanno un nome che inizia con EST e colonne che contengono CALLREF ovunque nei loro nomi.
Ciò può essere utile quando si elaborano le colonne su cui si desidera unirsi, ad esempio, a seconda delle convenzioni di denominazione delle tabelle e delle colonne.
select * from cols
e ho restituito 0 righe.
sqlplus
Se stai usando sqlplus
potresti voler prima impostare alcuni parametri per una visualizzazione migliore se le tue colonne sono alterate (queste variabili non dovrebbero persistere dopo aver chiuso la sqlplus
sessione):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
È quindi possibile utilizzare qualcosa del genere per vedere tutti i nomi delle tabelle:
SELECT table_name, owner, tablespace_name FROM all_tables;
Come menziona @Justin Cave, puoi usarlo per mostrare solo le tabelle che possiedi:
SELECT table_name FROM user_tables;
Tieni presente che alcune "tabelle" potrebbero in realtà essere "viste", quindi puoi anche provare a eseguire qualcosa del tipo:
SELECT view_name FROM all_views;
Questo dovrebbe produrre qualcosa che sembra abbastanza accettabile come:
pagesize 30
con pagesize 1000
?
Query semplice per selezionare le tabelle per l'utente corrente:
SELECT table_name FROM user_tables;
Prova le seguenti visualizzazioni del dizionario dei dati.
tabs
dba_tables
all_tables
user_tables
Prova a selezionare da user_tables che elenca le tabelle di proprietà dell'utente corrente.
Database Oracle per visualizzare i nomi di tutte le tabelle utilizzando la query seguente
SELEZIONA proprietario, nome_tabella DA dba_tables; SELEZIONA proprietario, table_name FROM all_tables; SELEZIONA table_name FROM user_tables;
vist more: http://www.plsqlinformation.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
fornisce tutte le tabelle di tutti gli utenti solo se l'utente con cui si è effettuato l'accesso dispone dei sysdba
privilegi.
Non ho trovato una risposta che indichi l'uso
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
così ho deciso di aggiungere anche la mia versione. Questa vista in realtà restituisce più di DBA_TABLES in quanto restituisce anche le tabelle degli oggetti ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm ).
È possibile utilizzare Oracle Data Dictionary per ottenere informazioni sugli oggetti Oracle.
È possibile ottenere un elenco di tabelle in diversi modi:
select *
from dba_tables
o per esempio:
select *
from dba_objects
where object_type = 'TABLE'
Quindi puoi ottenere le colonne della tabella usando il nome della tabella:
select *
from dba_tab_columns
Quindi è possibile ottenere un elenco di dipendenze (trigger, viste e così via):
select *
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name
Quindi è possibile ottenere l'origine del testo di questi oggetti:
select * from dba_source
E puoi usare USER
o ALL
visualizzare invece che DBA
se lo desideri.
Siamo in grado di ottenere tutte le tabelle inclusi i dettagli della colonna dalla query seguente:
SELECT * FROM user_tab_columns;
Di seguito è riportato un frammento commentato di query SQL che descrivono come utilizzare le opzioni:
-- 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;
Una nuova funzionalità disponibile in SQLcl (che è un'interfaccia della riga di comando gratuita per Oracle Database) è
Tables
alias.
Ecco alcuni esempi che mostrano l'utilizzo e gli aspetti aggiuntivi della funzione. Innanzitutto, connettiti a una sessione della sql
riga di comando ( sql.exe
in Windows). Si consiglia di immettere questo comando sqlcl specifico prima di eseguire qualsiasi altro comando o query che visualizzi i dati.
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
..
Per sapere a cosa tables
si riferisce l' alias, puoi semplicemente usarealias list <alias>
SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------
select table_name "TABLES" from user_tables
Non è necessario definire questo alias come viene fornito per impostazione predefinita in SQLcl. Se si desidera elencare le tabelle da uno schema specifico, utilizzando un nuovo alias definito dall'utente e passare il nome dello schema come argomento di bind con solo una serie di colonne visualizzate, è possibile farlo utilizzando
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Successivamente puoi semplicemente passare il nome dello schema come argomento
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
..
..
Un alias predefinito più sofisticato è noto come Tables2
, che visualizza diverse altre colonne.
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
Per sapere quale query viene eseguita in background, immettere
alias list tables2
Questo ti mostrerà una query leggermente più complessa insieme a column
definizioni predefinite comunemente utilizzate in SQL * Plus.
Jeff Smith spiega di più sugli alias qui
Stavo cercando di ottenere un elenco di tutti i nomi di colonne appartenenti a una tabella di uno schema ordinati in base all'ordine dell'ID colonna.
Ecco la domanda che sto usando: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
Infatti, è possibile avere l'elenco delle tabelle tramite SQL queries.it è possibile farlo anche tramite strumenti che consentono la generazione di dizionari di dati, come ERWIN , Toad Data Modeler o ERBuilder . Con questi strumenti, oltre ai nomi delle tabelle, avrai campi, i loro tipi, oggetti come (trigger, sequenze, dominio, viste ...)
Di seguito i passaggi da seguire per generare la definizione delle tabelle:
Il database verrà visualizzato nel software come un diagramma di relazione tra entità.
select * from all_all_tables
questo ulteriore "all" all'inizio fornisce 3 colonne extra che sono:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(come fatto in MySQL) lavoro?