Sto attraversando un periodo difficile con una classe che sto prendendo. Abbiamo bisogno di scrivere uno script Oracle che agirà proprio come il comando DESCRIBE. Il libro che stiamo usando descrive molto poco il modo di lavorare con il dizionario dei dati. Non cercare risposte, ma un punto nella direzione corretta.Come posso descrivere una tabella in Oracle senza utilizzare il comando DESCRIBE?
risposta
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
.
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
È 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;
Questa risposta è ottima perché fornisce anche indici e chiavi per la tabella. – rlobban
visivamente più attraente sarebbe questa leggera modifica: 'seleziona regexp_replace (dbms_metadata.get_ddl ('TABLE', '
Grazie! Questo è sicuramente il migliore che io abbia mai visto. – patricksweeney