Ich habe eine harte Zeit mit einer Klasse, die ich nehme. Wir müssen ein Oracle-Skript schreiben, das genau wie der DESCRIBE-Befehl funktioniert. Das Buch, das wir verwenden, beschreibt, wie man mit dem Data Dictionary sehr schlecht arbeitet. Nicht nach Antworten suchen, sondern nach einem Punkt in die richtige Richtung.Wie kann ich eine Tabelle in Oracle beschreiben, ohne den DESCRIBE-Befehl zu verwenden?
Antwort
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.
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
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;
Diese Antwort ist großartig, denn sie gibt auch Indizes und Schlüssel für die Tabelle. – rlobban
optisch ansprechender wäre diese leichte Änderung: 'Wählen Sie regexp_replace (dbms_metadata.get_ddl ('TABELLE', '
Dank! Dies ist definitiv das Beste, was ich je gesehen habe. – patricksweeney