IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Oracle Discussion :

Ajout d'une nouvelle colonne dans une table


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Points : 97
    Points
    97
    Par défaut Ajout d'une nouvelle colonne dans une table
    Bonjour,

    Voici mon problème : j'ai une table titi sous Oracle SQL Developper et je veux y ajouter une colonne entre la première et la deuxième position ainsi que modifier l'emplacement d'une colonne.
    Comme j'ai bien compris que sous Oracle on ne peut pas faire ça directement, j'ai donc créé une nouvelle table titi_nv et dans le script SQL j'ai fait mes modifs.
    Or Oracle crie en disant :
    Erreur à la ligne de commande :: 14, colonne : 15
    Rapport d'erreur :
    Erreur SQL : ORA-02264: nom déjà utilisé par une contrainte existante
    02264. 00000 - "name already used by an existing constraint"
    Voici donc la ligne 14 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CONSTRAINT "FK_ID_TYPE_ENTITE"
      FOREIGN KEY ("ID_TYPE_ENTITE")
      REFERENCES "REFUNI"."NOMEN_SUPANNTYPEENTITE" ("ID_TYPE_ENTITE")
      ON DELETE CASCADE ENABLE,
    Je comprends bien que le problème vient du fait que dans ma première table titi il existe déjà cette contrainte ......
    Mais alors comment faire ????

    Deuxième question : Comment récupérer les données qui remplissent déjà ma table ?????
    Merci d'avance pour vos lumières .....
    NFHnv

  2. #2
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Donner un autre nom a la contrainte !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il vous faut renommer tout ce qui touche à la table que vous comptez réutiliser.

    Prenons ce point de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    create table ref_entite
    (
      id_type_entite number(5) not null
    , constraint pk_ref_entite
        primary key (id_type_entite)
        using index
    );
     
    create table titi
    (
      id_titi        number(5)    not null
    , lb_titi        varchar2(10) not null
    , id_type_entite number(5)    not null
    , constraint pk_titi
        primary key (id_titi)
        using index
    , constraint fk_titi_ref
        foreign key (id_type_entite)
        references ref_entite (id_type_entite)
    );
     
    create index fk_titi_ref
    on titi (id_type_entite);
    On veut donc rajouter une colonne à la table titi entre les positions un et deux - notez bien qu'informatiquement parlant ça n'a aucune valeur si ce n'est vous faire perdre du temps pour écrire le script et du temps à la machine pour l'exécuter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    alter table titi rename constraint pk_titi     to pk_titi_old;
    alter table titi rename constraint fk_titi_ref to fk_titi_old_ref;
    alter index pk_titi     rename to pk_titi_old;
    alter index fk_titi_ref rename to fk_titi_old_ref;
    alter table titi rename to titi_old;
    Une fois les objets renommés, on peut recréer la table et l'alimenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    create table titi
    (
      id_titi        number(5)    not null
    , cd_titi        varchar2( 2)     null
    , lb_titi        varchar2(10) not null
    , id_type_entite number(5)    not null
    , constraint pk_titi
        primary key (id_titi)
        using index
    , constraint fk_titi_ref
        foreign key (id_type_entite)
        references ref_entite (id_type_entite)
    );
     
    insert /*+ append */ into titi (id_titi, lb_titi, id_type_entite)
    select id_titi, lb_titi, id_type_entite
      from titi_old;
     
    commit;
     
    create index fk_titi_ref
    on titi (id_type_entite);
     
    select * from titi;
     
    -- drop table titi_old; Après validation
    Maintenant c'est à comparer avec, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    alter table titi add cd_titi varchar2(2) null;
     
    alter table titi rename to t_titi;
     
    create view v_titi as
    select id_titi, cd_titi, lb_titi, id_type_entite
      from t_titi;
     
    create synonym titi for v_titi;
     
    select * from titi;

  4. #4
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Si je puis me permettre, un gros bintz pour un besoin complétement inutile !
    (voir post précedent sur le même sujet !)
    http://www.developpez.net/forums/d12...ne-veux-table/
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  5. #5
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2009
    Messages : 447
    Points : 241
    Points
    241
    Par défaut
    tu peux modifier l"emplacement des colonnes en créant une table qui prend les données de la table old,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
     
    create table table_new as 
    select colonne1,colonne3,colonne2
    from table_old,
    et aprés tu peux supprimer l'ancienne table , et renommé le:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table table_new rename to tableX;
    Crdt

Discussions similaires

  1. Réponses: 82
    Dernier message: 05/02/2011, 14h34
  2. Réponses: 3
    Dernier message: 31/10/2007, 10h54
  3. Réponses: 2
    Dernier message: 23/04/2007, 00h10
  4. Réponses: 1
    Dernier message: 10/05/2006, 15h01
  5. Debutant SQL : Comment inserer une nouvelle colonne dans une
    Par cquadjul dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/07/2005, 21h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo