Je connais la déclaration:
create table xyz_new as select * from xyz;
Qui copie la structure et les données, mais que se passe-t-il si je veux juste la structure?
sql
oracle
copy
database-table
Andrew
la source
la source
Réponses:
Utilisez simplement une clause where qui ne sélectionnera aucune ligne:
Limites
Les éléments suivants ne seront pas copiés dans la nouvelle table:
Cela ne gère pas non plus les partitions
la source
J'ai utilisé la méthode que vous avez beaucoup acceptée, mais comme quelqu'un l'a souligné, elle ne fait pas double emploi avec les contraintes (sauf NOT NULL, je pense).
Une méthode plus avancée si vous souhaitez dupliquer la structure complète est la suivante:
Cela vous donnera le texte complet de l'instruction create que vous pouvez modifier à votre guise pour créer la nouvelle table. Il faudrait bien sûr changer les noms de la table et toutes les contraintes.
(Vous pouvez é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:
la source
My_table_name
est la table existante. Mais comment puis-je créer le nom de ma nouvelle table?new_table = dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ).
En attendant, faites-moi savoir ce que fait LONG ici.À l'aide du développeur SQL, 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 à partir d'Oracle.
Si la table contient 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.
la source
SQL
Pour éviter de répéter encore et encore et de ne rien insérer en fonction de la condition où 1 = 2
la source
la source
Vous pouvez le faire
Create table New_table as select * from Old_table where 1=2 ;
mais faites attention La table que vous créez n'a pas d'index, Pk et ainsi de suite comme l'ancienne tablela source
Créez une nouvelle table vide en utilisant le schéma d'une autre. Ajoutez simplement une clause WHERE qui fait que la requête ne renvoie aucune donnée:
la source
vous pouvez aussi faire un
puis tronquez le tableau
abc_new
. J'espère que cela suffira à vos besoins.la source
Écrivez simplement une requête comme:
où
new_table
est le nom de la nouvelle table que vous souhaitez créer etold_table
le nom de la table existante dont vous souhaitez copier la structure, cela copiera uniquement la structure.la source
WHERE 1 = 0
ou de fausses conditions similaires fonctionnent, mais je n'aime pas à quoi elles ressemblent. Le code marginalement plus propre pour Oracle 12c + IMHO estCREATE TABLE bar AS SELECT * FROM foo FETCH FIRST 0 ROWS ONLY;
Les mêmes limitations s'appliquent: seules les définitions de colonne et leur nullité sont copiées dans une nouvelle table.
la source
D'une autre manière, vous pouvez obtenir un ddl de création de table à partir de la commande répertoriée ci-dessous et exécuter la création.
TYPE
estTABLE
,PROCEDURE
etc.Avec cette commande, vous pouvez obtenir la majorité des ddl des objets de base de données.
la source
GET_DDL
sont sensibles à la casse.Source_table est la table dont vous voulez copier la structure.
la source
En utilisant le développeur pl / sql, vous pouvez cliquer avec le bouton droit sur le nom_table dans l'espace de travail sql ou dans l'explorateur d'objets, puis cliquer sur "voir" et cliquer sur "voir sql" qui génère le script sql pour créer la table avec toutes les contraintes , index, partitions etc.
Ensuite, vous exécutez le script en utilisant le nouveau_nom_table
la source
copier sans données de table
copier avec les données du tableau
la source
- Cela va créer un tableau et copier toutes les données.
- Cela aura la même structure de tableau mais toutes les données copiées seront supprimées.
Si vous souhaitez surmonter les limitations spécifiées par la réponse: Comment puis-je créer une copie d'une table Oracle sans copier les données?
la source
La tâche ci-dessus peut être effectuée en deux étapes simples.
ÉTAPE 1:
Ce qui
query
précède crée un doublon d'une table (avec son contenu également).Pour obtenir la structure, supprimez le contenu du tableau à l'aide de.
ÉTAPE 2:
J'espère que ceci résoudra votre problème. Et grâce aux articles précédents. M'a donné beaucoup de perspicacité.
la source
truncate
version. En plus d'allouer des extensions pour toutes les données, vous ne les libérez pas en les supprimant, vous perdez donc potentiellement de l'espace à moins que la table ne prenne sa taille d'origine. Et vous générez annuler / rétablir sur l'insertion et la suppression. La réponse de Jim évite tout simplement tout cela.