Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie generiert man DDL programmgesteuert aus der Oracle-Datenbank?

Das DBMS_METADATA-Paket (vorausgesetzt, Sie verwenden eine recht aktuelle Version von Oracle) generiert die DDL für jedes Objekt in der Datenbank. Also

SELECT dbms_metadata.get_ddl( 'TABLE', 'TABLEA', 'SCHEMAA' )
  FROM dual;

gibt ein CLOB mit der DDL für SchemaA.TableA zurück. Sie könnten die ausgelöste Ausnahme abfangen, dass das Objekt nicht existiert, aber ich würde vorschlagen, dass Sie das Datenwörterbuch (d. H. DBA_OBJECTS) abfragen, um zu überprüfen, ob es eine Tabelle namens TableA in SchemaA gibt, d. H.

SELECT COUNT(*) 
  FROM dba_objects
 WHERE owner = 'SCHEMAA'
   AND object_name = 'TABLEA'
   AND object_type = 'TABLE'

Beachten Sie, dass Sie, wenn Sie keinen Zugriff auf DBA_OBJECTS haben, stattdessen ALL_OBJECTS verwenden können. Die Sorge dabei ist jedoch, dass es möglicherweise eine TableA in SchemaA gibt, auf die Sie keinen SELECT-Zugriff haben. Diese Tabelle würde nicht in ALL_OBJECTS erscheinen (das alle Objekte enthält, auf die Sie Zugriff haben), aber sie würde in DBA_OBJECTS erscheinen (das alle Objekte in der Datenbank enthält, unabhängig davon, ob Sie darauf zugreifen können).

Sie können die DDL dann entweder in eine Datei schreiben oder, wenn der Zähler 0 ist, angeben, dass das Objekt nicht vorhanden ist. Von einer gespeicherten Prozedur aus können Sie das UTL_FILE-Paket verwenden, um in eine Datei auf dem Datenbankserver zu schreiben. Wenn Sie versuchen, in eine Datei auf dem Client-Dateisystem zu schreiben, müssen Sie eine Sprache verwenden, die Zugriff auf die Ressourcen des Client-Betriebssystems hat. Ein kleines C/Java/Perl/usw. Programm sollte in der Lage sein, ein CLOB auszuwählen und diese Daten in eine Datei auf dem Client-Betriebssystem zu schreiben.