2012-03-24 6 views

Antwort

27

Sie suchen USER_TAB_COLUMNS - alle Spalten, und ihre Beschreibungen in dem Schema der Abfrage in ausgeführt wird - oder ALL_TAB_COLUMNS - das gleiche, außer für all Tabellen, zu deren Anzeige der Benutzer berechtigt ist.

Eine typische Abfrage könnte sein:

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

column_id ist die "Ordnung" der Spalte in der Tabelle.

Sie sollten sicherstellen, dass "MY_TABLE" großgeschrieben wird, es sei denn, Sie haben Tabellen mit Gehäuse hinzugefügt (eine schlechte Idee), in diesem Fall müssen Sie etwas wie = "MyTable" verwenden.

Insbesondere desc entspricht dem folgenden, die ich von ss64 gestohlen hat, eine gute Oracle-Ressource:

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'; 

Sie können select * from dictionary all dieser Art von Blick finden, die die oberste Ebene des data dictionary ist oder mit Blick auf die documentation.

Es gibt auch die DBA_TAB_COLUMNS, die die gleiche wie ALL_TAB_COLUMNS ist, aber für jede Tabelle in der Datenbank. Dies setzt voraus, dass Sie über die Berechtigungen verfügen, um es und die Tabellen anzuzeigen. Wenn Sie keinen Zugriff auf diese Tabelle haben, müssen Sie Ihren DBA dazu bringen, Ihnen die Berechtigung SELECT ANY DICTIONARY zu erteilen.

+0

Dank! Dies ist definitiv das Beste, was ich je gesehen habe. – patricksweeney

1

Oracle verfügt über Tabellen, die Metadaten zur Datenbankstruktur enthalten. Es gibt eine Tabelle mit Tabellen. Eine Tabelle der Ansichten. Eine Tabelle mit Spalten. Sie können diese Tabellen mithilfe von Sichten wie USER_TABLES (Tabellen in Ihrem Schema), ALL_TABLES (Tabellen, die Sie anzeigen können), DBA_TABLES (alle Tabellen, wenn Sie über die Berechtigungen verfügen) abfragen. Allgemeiner unterstützen viele Datenbankanbieter das "Informationsschema", das eine konsistente Sicht auf die Metadaten zwischen Anbietern bietet. Suche nach „ALL_TABLES“ hier und sehen Sie sich all die anderen Informationen verfügbar http://docs.oracle.com/cd/B28359_01/server.111/b28320/toc.htm

13

Sie können auch den gesamten Befehl abrufen, die die Tabelle verwendet werden können, neu zu erstellen:

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

Diese Antwort ist großartig, denn sie gibt auch Indizes und Schlüssel für die Tabelle. – rlobban

+1

optisch ansprechender wäre diese leichte Änderung: 'Wählen Sie regexp_replace (dbms_metadata.get_ddl ('TABELLE', '

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

+1

@rlobban - Dieser Befehl zeigt keine Indizes an – Kingsly