Je connais la déclaration :
create table xyz_new as select * from xyz;
Ce qui copie la structure et les données, mais que faire si je ne veux que la structure ?
Je connais la déclaration :
create table xyz_new as select * from xyz;
Ce qui copie la structure et les données, mais que faire si je ne veux que la structure ?
Il suffit d'utiliser une clause where qui ne sélectionne aucune ligne :
create table xyz_new as select * from xyz where 1=0;
Les éléments suivants ne seront pas copiés dans la nouvelle table :
Cela ne gère pas non plus les partitions
C'est une réponse très claire. Je veux juste rappeler que cela pas inclure des contraintes la nouvelle table n'aura même pas de clé primaire.
La nouvelle table n'aura pas non plus d'index - ne vous faites pas surprendre en essayant de faire une grosse requête sur la nouvelle table :-)
J'ai beaucoup utilisé la méthode que vous avez acceptée, mais comme quelqu'un l'a fait remarquer, elle ne duplique pas les contraintes (sauf pour NOT NULL, je crois).
Une méthode plus avancée, si vous souhaitez dupliquer la structure complète, est la suivante :
SET LONG 5000
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME' ) FROM DUAL;
Vous obtiendrez ainsi le texte complet de l'instruction de création, que vous pourrez modifier comme vous le souhaitez pour créer la nouvelle table. Vous devrez bien sûr changer les noms de la table et toutes les contraintes.
(Vous pouviez également le faire dans les anciennes versions en utilisant EXP/IMP, mais c'est beaucoup plus facile maintenant).
Modifié pour ajouter Si la table que vous recherchez se trouve dans un schéma différent :
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;
My_table_name
est la table existante. Mais comment puis-je obtenir le nom de ma nouvelle table créée ?
La commande dans ma réponse ne crée pas la nouvelle table ; elle renvoie le SQL que vous utiliseriez pour recréer la table originale. Vous le modifiez comme vous le souhaitez puis vous l'exécutez. Le nom de la nouvelle table est donc celui que vous choisissez de spécifier.
En utilisant sql developer, sélectionnez la table et cliquez sur l'onglet DDL.
Vous pouvez utiliser ce code pour créer une nouvelle table sans données lorsque vous l'exécutez dans une feuille de calcul sql.
sqldeveloper est une application gratuite d'oracle.
Si la table comporte des séquences ou des déclencheurs, le ddl les génère parfois aussi pour vous. Vous devez juste faire attention à l'ordre dans lequel vous les faites et savoir quand activer ou désactiver les déclencheurs.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
En rapport : stackoverflow.com/questions/11472519/