2009-07-28 6 views
0

Supposons que j'ai deux bases de données Oracle. Nous allons les appeler base de données Une base de données et B.Est-il possible de "déplacer" par programme une définition de table Oracle d'une base de données à une autre?

Supposons maintenant que j'ai une table dans la base de données A qui est défini comme ceci:

CREATE TABLE foo 
(
    foo_id INT PRIMARY KEY, 
    some_text VARCHAR2(10), 
    other_table_id INT 

    CONSTRAINT some_fk_constraint 
     FOREIGN KEY (other_table_id) 
     REFERENCES other_table(other_table_id) 
) 

... est-il un moyen facile de créer cette même table base de données B avec la même clé primaire et la même clé étrangère, mais sans données? Ce serait idéal s'il y avait une méthode SQL pure donc je peux le faire en Python avec cx_Oracle, mais je peux lancer un script shell si besoin est.

+1

voir cette question, il est très similaire: http://stackoverflow.com/questions/1195410/create-table-reverse-engineering-in-oracle – akf

Répondre

1

DBMS_METADATA ressemble le paquet que vous cherchez

select dbms_metadata.get_ddl('TABLE','DEPT','SCOTT') from dual; 

Ensuite, vous pouvez l'exécuter avec EXECUTE IMMEDIATE

1
 
select dbms_metadata.get_ddl('TABLE','FOO','SCHEMA_NAME') from dual; 

Cela vous ramènera le DDL nécessaire pour créer/recréer la table. Une chose à noter, cela renvoie les espaces de table utilisés dans la base de données source (dans votre cas A), vous devrez donc vous assurer qu'ils existent dans la base de données B et que l'utilisateur que vous avez connecté dispose de quotas appropriés.

Questions connexes