Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment générer par programme DDL à partir de la base de données Oracle ?

Le package DBMS_METADATA (en supposant que vous utilisez une version raisonnablement récente d'Oracle) générera le DDL pour tout objet de la base de données. Alors

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

renverra un CLOB avec le DDL pour SchemaA.TableA. Vous pourriez attraper l'exception qui est levée que l'objet n'existe pas, mais j'aurais tendance à suggérer que vous interrogez le dictionnaire de données (c'est-à-dire DBA_OBJECTS) pour vérifier qu'il existe une table nommée TableA dans SchemaA, c'est-à-dire

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

Notez que si vous n'avez pas accès à DBA_OBJECTS, vous pouvez utiliser ALL_OBJECTS à la place. Le problème ici, cependant, est qu'il peut y avoir une TableA dans SchemaA sur laquelle vous n'avez pas d'accès SELECT. Cette table n'apparaîtrait pas dans ALL_OBJECTS (qui contient tous les objets auxquels vous avez accès), mais elle apparaîtrait dans DBA_OBJECTS (qui contient tous les objets de la base de données, quelle que soit votre capacité à y accéder).

Vous pouvez alors soit écrire le DDL dans un fichier, soit, si le compte est 0, indiquer que l'objet n'existe pas. A partir d'une procédure stockée, vous pouvez utiliser le package UTL_FILE pour écrire dans un fichier sur le serveur de base de données. Si vous essayez d'écrire dans un fichier du système de fichiers client, vous devez utiliser un langage qui a accès aux ressources du système d'exploitation client. Un petit programme C/ Java/ Perl/ etc. devrait être capable de sélectionner un CLOB et d'écrire ces données dans un fichier sur le système d'exploitation client.