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

Langage SQL Discussion :

Problème sur ALTER TABLE ADD (colonne)


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1
    Points : 3
    Points
    3
    Par défaut Problème sur ALTER TABLE ADD (colonne)
    Bonjour a tous
    Je n'arrive pas a me depatouiller en sql ou plsql pour rajouter un nombre de champs dans une table x,ces nouveaux champs proviennent en fait du contenue d'une table Y sensee evoluer.
    EX: table y ayant une colonne champ nom
    nom
    ch1
    ch2
    ch3
    ....

    et faire un alter table add sur la table Y qui posse deja 2 champs anc1 et anc2 pour avoir en colonne

    anc1,anc2,ch1,ch2,ch3,..

    Merci a celui qui trouveras la solution.
    Je travaile que sur un serveur oracle.

  2. #2
    Membre régulier Avatar de reno_tidus
    Profil pro
    Inscrit en
    Août 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 132
    Points : 122
    Points
    122
    Par défaut
    Inutile de poster 2 fois pour commencer, tu n'auraas pas plus de réponse et tu risque de te faire engueulé

    Je ne suis pas sur d'avoir bien compris, ta table Y possède une colonne nom mais ch1, ch2 et ch3 sont des valeurs de cette colonne ou d'autres colonnes

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    avec plsql je ferais
    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
    27
    28
    29
    30
    31
    32
    33
     
    SQL> create table x(anc1 number, anc2 number);
     
    Table created.
     
    SQL> create table y(nom varchar2(3));
     
    Table created.
     
    SQL> insert into y values('ch1');
     
    1 row created.
     
    SQL> insert into y values('ch2');
     
    1 row created.
     
    SQL> insert into y values('ch3');
     
    1 row created.
     
    SQL> exec for t in (select nom from y) loop execute immediate 'alter table x add ('||t.nom||' number)'; end loop
     
    PL/SQL procedure successfully completed.
     
    SQL> desc x
     Name                    Null?    Type
     ----------------------- -------- ----------------
     ANC1                             NUMBER
     ANC2                             NUMBER
     CH1                              NUMBER
     CH2                              NUMBER
     CH3                              NUMBER

  4. #4
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Salut Laurent,

    Ta solution est astucieuse il fallait y penser.

    Merci.
    LBO72.

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    merci mais quand je lis

    une table Y sensee evoluer.

    je ne suis toujours très sceptique

  6. #6
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    salut a tous,

    bon je cherchais comment ajouter des colonnes dans une table existante et pleine. et je suis tombé sur ce post !

    dans l espoire de ne pas parraitre un peu idiot, a quoi correcpond le 't' dans cette commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec FOR t IN (SELECT nom FROM y) loop execute immediate 'alter table x add ('||t.nom||' number)'; end loop
    merci par avance.

    sauf s'il existe un moyen plus simple pour ajouter qlqs colonne dans une table sans y modifier le contenue ?

  7. #7
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Bonjour,

    Le 't' c'est le curseur sur ta requête : SELECT nom FROM y

    LBO72.

  8. #8
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    et il se traduit comment en oracle ce curseur please ??

  9. #9
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Dans un bloc Pl-SQL, tu peux le traduire par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    begin
        FOR curs IN (SELECT nom FROM y) loop 
                --- tu auras dans curs toutes les lignes de ta requête SELECT nom FROM y   une à une
                execute immediate 'alter table x add ('||curs.nom||' number)'; 
        end loop;
    end
    /

  10. #10
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    marche po

    voila ce que j'ai;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SQL> desc tsk01
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     A0020                                     NOT NULL NUMBER(2)
     A0090                                     NOT NULL NUMBER(5)
     A1010                                     NOT NULL NUMBER(6)
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> desc tsk02
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     CH01                                      NOT NULL NUMBER(6)
    le contenu de tsk02 (a ajouter dans tsk01 ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select * from tsk02
      2  ;
           110
           120
           130
    ma requete comme tu me l'as indiqué
    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
    SQL> begin
      2  exec FOR curs IN (SELECT ch01 from tsk02) loop execute immediate 'alter table tsk01 add ('||curs.ch01||' number)';
      3  end loop;
      4  end
      5  /
    exec FOR curs IN (SELECT ch01 from tsk02) loop execute immediate 'alter table tsk01 add ('||curs.ch01||' number)';
         *
    ERROR at line 2:
    ORA-06550: line 2, column 6:
    PLS-00103: Encountered the symbol "FOR" when expecting one of the following:
    := . ( @ % ;
    The symbol ";" was substituted for "FOR" to continue.
    ORA-06550: line 4, column 3:
    PLS-00103: Encountered the symbol "end-of-file" when expecting one of the
    following:
    ; <an identifier> <a double-quoted delimited-identifier>
    The symbol ";" was substituted for "end-of-file" to continue.
    alors c est ou je merde steuplai ??

    merci

  11. #11
    Membre averti Avatar de LBO72
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Points : 342
    Points
    342
    Par défaut
    Il faut supprimer le EXEC dans le bloc Pl-SQL


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     begin
        exec FOR curs IN (SELECT ch01 FROM tsk02)  loop
           execute immediate 'alter table tsk01 add ('||curs.ch01||' number)';
      end loop;
      end;
       /

  12. #12
    Membre régulier
    Inscrit en
    Juin 2006
    Messages
    193
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 193
    Points : 76
    Points
    76
    Par défaut
    deso mais vu que j y connais rien j ai encore un problem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SQL> begin
      2  FOR curs IN (SELECT ch01 from tsk02) loop execute immediate 'alter table tsk01 add ('||curs.ch01||' number)';
      3  end loop;
      4  end
      5  /
    end
      *
    ERROR at line 4:
    ORA-06550: line 4, column 3:
    PLS-00103: Encountered the symbol "end-of-file" when expecting one of the
    following:
    ; <an identifier> <a double-quoted delimited-identifier>
    The symbol ";" was substituted for "end-of-file" to continue.
    une derniere tentative et je te fou la paix

    merci

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 390
    Points
    28 390
    Par défaut
    Il manque juste un ; après le END à la ligne 4

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ordre des colonnes après un alter table add
    Par Etienne5685 dans le forum Développement
    Réponses: 2
    Dernier message: 30/05/2011, 18h21
  2. Réponses: 3
    Dernier message: 27/06/2008, 13h57
  3. Problème requête ALTER TABLE
    Par 1tsiMat dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/06/2006, 13h16
  4. Problème d'alter table dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/03/2005, 09h19

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