2010-01-19 9 views
0

J'ai une exigence où je veux renommer une colonne. Dans ce cas, il devrait arriver comme:SÉLECTIONNEZ DANS la même table

1.) Je dois créer une nouvelle colonne avec la structure de colonne existante. 2.) Migrez les données vers la nouvelle colonne. 3.) Conserver l'ancienne colonne.

Je n'ai pas la nouvelle structure de colonne et je dois la prendre dans l'ancienne colonne.

TIA.

+0

Etes-vous sûr de vouloir conserver les anciennes colonnes et ne pas les retirer? –

+0

Cela ne devrait-il pas être «je dois créer une nouvelle ** table ** avec la structure de colonne existante»? –

+0

Je dois conserver l'ancienne colonne. Sinon c'est simple. – user155573

Répondre

4

Vous n'avez pas besoin de sélectionner dans la même table. Effectuez les étapes suivantes:

  1. Créez la nouvelle colonne en tant que nullable.
  2. Utilisez une instruction update pour remplir les données dans la nouvelle colonne en fonction des valeurs de l'ancienne colonne.
  3. Ajoutez une contrainte non nullable, le cas échéant.
  4. Mettez à jour toutes les requêtes et code pour utiliser les valeurs de la nouvelle colonne à la place de l'ancienne colonne.
  5. Retirez l'ancienne colonne.
+0

C'est vraiment la façon dont j'irais. –

+0

4.) Comment ajouter l'ancienne structure et les contraintes de la colonne au nouveau? – user155573

+0

@blog: La façon dont je suggère de le faire, vous n'avez pas besoin d'une nouvelle table, donc vous n'avez besoin de rien en dehors des étapes que j'ai décrites ci-dessus. –

1

Quelle version d'Oracle? Vous pouvez renommer la colonne depuis 9i R2:

ALTER TABLE your_table 
RENAME COLUMN old_name to new_name; 

Si vous définissez à recréer la table afin que vous puissiez utiliser SELECT INTO, alors vous voulez utiliser les étapes suivantes:

  1. contraintes Drop liés à la table (s)
  2. indices Drop liés à la table (s)
  3. Verrouillez la table originale:

    LOCK TABLE old_table IN EXCLUSIVE MODE; 
    
  4. Renommer la table:

    RENAME old_table TO old_table_orig 
    
  5. Créer la nouvelle table avec les colonnes correctes/mises à jour

  6. Exécutez votre pour remplir le nouveau script de table SELECT INTO (s), le traitement des changements de type de données s'il y a tout
  7. Ajouter index
  8. Ajouter contraintes
  9. drop the old_table_orig
+1

Je ne peux pas renommer la colonne. – user155573

+1

@blog: Pourquoi ne pouvez-vous pas renommer la colonne? –

Questions connexes