Oracle
 sql >> Database >  >> RDS >> Oracle

Come generare a livello di codice DDL dal database Oracle?

Il pacchetto DBMS_METADATA (supponendo che tu sia su una versione ragionevolmente recente di Oracle) genererà il DDL per qualsiasi oggetto nel database. Quindi

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

restituirà un CLOB con il DDL per SchemaA.TableA. Potresti catturare l'eccezione che viene generata che l'oggetto non esiste, ma tendo a suggerire di interrogare il dizionario dei dati (cioè DBA_OBJECTS) per verificare che ci sia una tabella denominata TableA in SchemaA, cioè

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

Nota che se non hai accesso a DBA_OBJECTS, puoi invece usare ALL_OBJECTS. La preoccupazione, tuttavia, è che potrebbe esserci una TableA in SchemaA su cui non si dispone dell'accesso SELECT. Quella tabella non apparirà in ALL_OBJECTS (che ha tutti gli oggetti a cui hai accesso) ma apparirà in DBA_OBJECTS (che ha tutti gli oggetti nel database indipendentemente dalla tua capacità di accedervi).

È quindi possibile scrivere il DDL in un file o, se il conteggio è 0, indicare che l'oggetto non esiste. Da una procedura memorizzata, è possibile utilizzare il pacchetto UTL_FILE per scrivere in un file sul server di database. Se si sta tentando di scrivere su un file nel file system del client, è necessario utilizzare una lingua che abbia accesso alle risorse del sistema operativo del client. Un piccolo programma C/ Java/ Perl/ ecc. dovrebbe essere in grado di selezionare un CLOB e scrivere quei dati in un file sul sistema operativo client.