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 :

Action possible en SQL ?


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Action possible en SQL ?
    Bonjour,

    je vous explique ma problématique : j'ai une table "FOMASS_DATA" avec deux colonnes old_act_id et new_act_id. Le old_act_id n'est pas unique (la clé primaire se fait avec une autre colonne). Je voudrais en un seul Update assigné le même new_act_id (avec une séquence) pour les old_act_id identique, j'ai réussi à le faire en PL/SQL mais est-ce c'est possible en SQL ?

    PL/SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    declare
      block_seq NUMBER;
      cursor curs is select old_act_id from fomass_data group by old_act_id;
    begin
      for old_act_id_u in curs
      loop
         select cfl_s_act_id.nextval into block_seq from dual;
         update fomass_data set new_act_id=block_seq where old_act_id=old_act_id_u.old_act_id;
      end loop;
    end;
    /
    J'ai déjà tenté quelque chose en SQL mais ça ne fonctionne pas, la séquence augmente pour chaque ligne updatée... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update fomass_data
    set new_act_id=cfl_s_act_id.nextval
    where old_act_id in(
                        select old_act_id
                        from fomass_data
                        group by old_act_id);
    Merci d'avance pour votre aide !

  2. #2
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut utiliser MERGE
    Je te propose d'utiliser Merge (si vous êtes sous oracle 9i ou plus):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     MERGE INTO fomass_data F01
        USING (SELECT old_act_id FROM fomass_data 
                   where where new_act_id IS NOT NULL) F02
          ON (F01.old_act_id = F02.old_act_id)
     WHEN MATCHED THEN 
     UPDATE SET new.old_act_id = new.old_act_id
     WHEN NOT MATCHED THEN 
      UPDATE SET new_act_id=cfl_s_act_id.nextval

    et voici un lien utile:
    http://oracle.developpez.com/faq/?page=3-1#merge

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par hazamor Voir le message
    Je te propose d'utiliser Merge (si vous êtes sous oracle 9i ou plus):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     MERGE INTO fomass_data F01
        USING (SELECT old_act_id FROM fomass_data 
                   where where new_act_id IS NOT NULL) F02
          ON (F01.old_act_id = F02.old_act_id)
     WHEN MATCHED THEN 
     UPDATE SET new.old_act_id = new.old_act_id
     WHEN NOT MATCHED THEN 
      UPDATE SET new_act_id=cfl_s_act_id.nextval

    et voici un lien utile:
    http://oracle.developpez.com/faq/?page=3-1#merge

    non ce n'est pas possible d'utilisé deux Update, on est obligé de suivre le schéma :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MERGE [ hint ]
    INTO [ schema. ]table [ t_alias ]
    USING [ schema. ] { table | view | subquery }
         [ t_alias ]
    ON ( condition )
       [ merge_update_clause ]
       [ merge_insert_clause ] ;
    Sinon on se tape une erreur ORA-00905 : "Mot-clé absent"...

Discussions similaires

  1. Boucle while avec action sur table SQL
    Par kamikazbe dans le forum JDBC
    Réponses: 4
    Dernier message: 01/06/2007, 11h46
  2. Impression d'etat avec annulation d'action possible
    Par Alexandre Sahli dans le forum IHM
    Réponses: 7
    Dernier message: 08/02/2007, 15h27
  3. Plusieurs actions possible dans un <form>
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/08/2006, 21h23
  4. Est-ce possible en SQL ?
    Par LeBigornot dans le forum Langage SQL
    Réponses: 3
    Dernier message: 10/03/2005, 10h23
  5. 2 champs dans un where , possible en sql server ?
    Par voyageur dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 19/10/2004, 05h01

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