2012-03-24 19 views

risposta

27

Siete alla ricerca di USER_TAB_COLUMNS - tutte le colonne, e le loro descrizioni nello schema la query viene eseguita in - o ALL_TAB_COLUMNS - lo stesso, tranne per tutti tabelle che l'utente ha il permesso di visualizzare.

Una query tipica potrebbe essere:

select * 
    from user_tab_columns 
where table_name = 'MY_TABLE' 
order by column_id 

column_id è il "ordine" della colonna nella tabella.

È necessario assicurarsi che "MY_TABLE" sia in maiuscolo a meno che non si siano aggiunte tabelle con involucro (una cattiva idea), nel qual caso è necessario utilizzare qualcosa come = "MyTable".

particolare desc è equivalente a quanto segue, che ho rubato da ss64, una buona risorsa Oracle:

select column_name as "Name" 
    , nullable as "Null?" 
    , concat(concat(concat(data_type,'('),data_length),')') as "Type" 
    from user_tab_columns 
where table_name = 'MY_TABLE'; 

si possono trovare tutti di questo tipo di vista da select * from dictionary, che è il livello superiore della data dictionary o guardando lo documentation.

C'è anche lo DBA_TAB_COLUMNS, che è lo stesso di ALL_TAB_COLUMNS, ma per ogni tabella nel database. Questo presuppone che tu abbia i privilegi per visualizzare sia esso che le tabelle. Se non si ha accesso a questa tabella è necessario ottenere il proprio DBA per concedere il privilegio SELECT ANY DICTIONARY.

+0

Grazie! Questo è sicuramente il migliore che io abbia mai visto. – patricksweeney

1

Oracle dispone di tabelle impostate contenenti metadati relativi alla struttura del database. C'è una tabella di tavoli. Una tabella di opinioni. Una tabella di colonne. Puoi interrogare queste tabelle usando viste come USER_TABLES (tabelle nello schema), ALL_TABLES (tabelle che hai il permesso di visualizzare), DBA_TABLES (tutte le tabelle, se disponi dei privilegi). Più genericamente, molti produttori di database supportano lo "schema delle informazioni" che fornisce una visione coerente dei metadati tra i vari fornitori. Cerca "ALL_TABLES" qui e guardare tutte le altre informazioni disponibili http://docs.oracle.com/cd/B28359_01/server.111/b28320/toc.htm

13

È inoltre possibile recuperare l'intero comando che può essere utilizzato per ricreare la tabella:

select dbms_metadata.get_ddl('TABLE','<my table name>','<table owner>') from dual; 
+1

Questa risposta è ottima perché fornisce anche indici e chiavi per la tabella. – rlobban

+1

visivamente più attraente sarebbe questa leggera modifica: 'seleziona regexp_replace (dbms_metadata.get_ddl ('TABLE', '

', '
'), '\ t | \ s {2}', CHR (13)) come ddl da dual' –

+1

@rlobban - Questo comando non mostra gli indici – Kingsly

Problemi correlati