sql >> Database >  >> RDS >> Oracle

Hoe programmatisch DDL genereren vanuit de Oracle-database?

Het pakket DBMS_METADATA (ervan uitgaande dat u een redelijk recente versie van Oracle gebruikt) genereert de DDL voor elk object in de database. Dus

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

retourneert een CLOB met de DDL voor SchemaA.TableA. Je zou de uitzondering kunnen opvangen die wordt gegenereerd dat het object niet bestaat, maar ik zou de neiging hebben om te suggereren dat je de datadictionary (d.w.z. DBA_OBJECTS) doorzoekt om te verifiëren dat er een tabel is met de naam TableA in SchemaA, dat wil zeggen

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

Houd er rekening mee dat als u geen toegang heeft tot DBA_OBJECTS, u in plaats daarvan ALL_OBJECTS kunt gebruiken. De zorg daar is echter dat er een TableA in SchemaA kan zijn waarvoor u geen SELECT-toegang hebt. Die tabel zou niet verschijnen in ALL_OBJECTS (die alle objecten bevat waartoe u toegang hebt), maar hij zou verschijnen in DBA_OBJECTS (die alle objecten in de database heeft, ongeacht uw mogelijkheid om ze te openen).

U kunt dan ofwel de DDL naar een bestand schrijven of, als de telling 0 is, aangeven dat het object niet bestaat. Vanuit een opgeslagen procedure kunt u het pakket UTL_FILE gebruiken om naar een bestand op de databaseserver te schrijven. Als u probeert te schrijven naar een bestand op het clientbestandssysteem, moet u een taal gebruiken die toegang heeft tot de bronnen van het clientbesturingssysteem. Een klein C/Java/Perl/etc.-programma zou een CLOB moeten kunnen selecteren en die gegevens naar een bestand op het clientbesturingssysteem moeten kunnen schrijven.




  1. MAKEDATE() Voorbeelden – MySQL

  2. Union en order by clausule gebruiken in mysql

  3. ODBC-gegevens analyseren in IBM SPSS

  4. Wat is het verschil tussen MS Access en SQL?