sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo generar DDL programáticamente desde la base de datos Oracle?

El paquete DBMS_METADATA (suponiendo que tenga una versión razonablemente reciente de Oracle) generará el DDL para cualquier objeto en la base de datos. Entonces

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

devolverá un CLOB con el DDL para SchemaA.TableA. Podría detectar la excepción que se lanza de que el objeto no existe, pero le sugiero que consulte el diccionario de datos (es decir, DBA_OBJECTS) para verificar que hay una tabla llamada TableA en SchemaA, es decir,

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

Tenga en cuenta que si no tiene acceso a DBA_OBJECTS, puede usar ALL_OBJECTS en su lugar. La preocupación allí, sin embargo, es que puede haber una TableA en SchemaA en la que no tiene acceso SELECT. Esa tabla no aparecerá en ALL_OBJECTS (que tiene todos los objetos a los que tiene acceso), pero aparecerá en DBA_OBJECTS (que tiene todos los objetos en la base de datos independientemente de su capacidad para acceder a ellos).

A continuación, puede escribir el DDL en un archivo o, si el recuento es 0, indicar que el objeto no existe. Desde un procedimiento almacenado, puede usar el paquete UTL_FILE para escribir en un archivo en el servidor de la base de datos. Si intenta escribir en un archivo en el sistema de archivos del cliente, necesitará usar un idioma que tenga acceso a los recursos del sistema operativo del cliente. Un pequeño programa C/ Java/ Perl/ etc. debería poder seleccionar un CLOB y escribir esos datos en un archivo en el sistema operativo del cliente.