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

SQL Oracle Discussion :

Mise à jour de plusieurs ligne dans un UPDATE


Sujet :

SQL Oracle

  1. #1
    Membre habitué Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Points : 127
    Points
    127
    Par défaut Mise à jour de plusieurs ligne dans un UPDATE
    Bonjour,

    Voiçi ma requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE AAAA
     
    SET mark_session = (SELECT marks_det.marks_session 
    				   FROM marks_det,inscription,student,AAAA,benefit
    				   WHERE marks_det.AVERAGE = AAAA.AVERAGE
    				   AND inscription.ID = marks_det.INSCRIPTION_ID
    				   AND inscription.STUDENT_ID = student.ID
    				   AND student.code = AAAA.CODE
    				   AND marks_det.BEN_ID = benefit.id)
    				   WHERE AAAA.CODE_MAT = benefit.COD
    Le problème içi c'est que le SELECT renvoit plusieurs valeurs bienqu'il y'a des jointures et c'est normal car je n'ai pas préciser une valeur.
    Comment faire pour effectuer cette mise à jours? Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    tu ne peux pas mettre à jour un champ si ton select rapporte plusieurs lignes... tu peux éventuellement ajouter un rownum au select pour restreindre à la première valeur trouvée ?

  3. #3
    Membre habitué Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Points : 127
    Points
    127
    Par défaut
    je ferai une procédure ...et je vais vous tenir au courant

  4. #4
    Membre habitué Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Points : 127
    Points
    127
    Par défaut
    voiçi la proédure que j'ai faite
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    CREATE OR REPLACE PROCEDURE modifAAAA is
    begin
     
    declare
    cursor c1 is select * from VIEW1;
    c1row c1%rowtype;
     
    open c1;
    loop
    fetch c1 into c1row;
    exit when c1%NOTFOUND;
    update AAAA
    SET mark_session := c1row.marks_session
    WHERE
    AAAA.ADDRESS = c1row.ADDRESS
    AND AAAA.AN = c1row.AN
    AND AAAA.AVERAGE =c1row.AVERAGE 
    AND AAAA.BEN_COEF = c1row.BEN_COEF
    AND AAAA.BIRTHDAY = c1row.BIRTHDAY
    AND AAAA.CODE = c1row.CODE
    AND AAAA.CODE_MAT = c1row.CODE_MAT
    AND AAAA.CODE_POSTAL = c1row.CODE_POSTAL
    AND AAAA.DIP = c1row.DIP
    AND AAAA.FAC = c1row.FAC
    AND AAAA.FNAME = c1row.FNAME
    AND AAAA.GENDER = c1row.GENDER
    AND AAAA.ID = c1row.ID 
    AND AAAA.INSCRI = c1row.INSCRI
    AND AAAA.LNAME = c1row.LNAME
    AND AAAA.MATIERE = c1row.MATIERE
    AND AAAA.NAME = c1row.NAME
    AND AAAA.NAME_1 = c1row.NAME_1
    AND AAAA.OBSERVATION = c1row.OBSERVATION  
    AND AAAA.PERIODE = c1row.PERIODE
    AND AAAA.REGION = c1row.REGION
    AND AAAA.RESPONSIBLE = c1row.RESPONSIBLE
    AND AAAA.SC_F = c1row.SC_F
    AND AAAA.SC_L = c1row.SC_L 
    AND AAAA.TITLE = c1row.TITLE
    AND AAAA.TITRE = c1row.TITRE
    AND AAAA.YEAR_ID = c1row.YEAR_ID
     
    end loop;
    close c1;
    end;
    Mais j'ai tjr cette erreur dont je n'ai pas pu la résoudre
    The following error has occurred:

    PROCEDURE SRPDEV.UPDATEAAAA
    On line: 10
    PLS-00103: Encountered the symbol "FETCH" when expecting one of the following:

    constant exception <an identifier>
    <a double-quoted delimited-identifier> table LONG_ double ref
    char binary na

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Le forum n'est pas fait pour résoudre des problèmes de syntaxe.

    pas de := dans du sql et il manque un ; à la fin de l'update.

  6. #6
    Membre habitué Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par McM Voir le message
    Le forum n'est pas fait pour résoudre des problèmes de syntaxe.

    pas de := dans du sql et il manque un ; à la fin de l'update.
    Ce forum est fait pour aider les gens Mr sinon ou est son utilité!! par contre merci pour ton aide mais j'ai déja corriger ces erreurs...


    Maintenant l'update ne marche pas

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par sofien Voir le message
    Ce forum est fait pour aider les gens Mr sinon ou est son utilité!! par contre merci pour ton aide mais j'ai déja corriger ces erreurs...


    Maintenant l'update ne marche pas
    Supprime la procédure elle ne sert à rien. Fait l'update en sql.

  8. #8
    Membre habitué Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Supprime la procédure elle ne sert à rien. Fait l'update en sql.
    justement le update en sql marche pas

  9. #9
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par sofien Voir le message
    justement le update en sql marche pas
    Si l'update ne marche pas en SQL il ne marchera jamais dans une procédure.
    Par contre si tu fait l'effort de comprendra où est le problème ça va passer sans aucun souci.
    Donc supprime la procédure elle ne sert à rien.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    je pense que le plus simple serait que tu nous donnes la description de view1 et de la table AAAA, non ?

    je pense qu'il y nettement trop de condition dans le where de ton update ...

  11. #11
    Membre habitué Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Gandahar Voir le message
    je pense que le plus simple serait que tu nous donnes la description de view1 et de la table AAAA, non ?

    je pense qu'il y nettement trop de condition dans le where de ton update ...
    oui justement pour que je puisse avoir une seule ligne qui sera mise à jour à la fois...

  12. #12
    Membre habitué Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Points : 127
    Points
    127
    Par défaut
    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
    CREATE TABLE AAAA ( 
      INSCRI        NUMBER (38)   NOT NULL, 
      YEAR_ID       NUMBER (13), 
      LNAME         VARCHAR2 (30)  NOT NULL, 
      FNAME         VARCHAR2 (30)  NOT NULL, 
      CODE          VARCHAR2 (30), 
      GENDER        VARCHAR2 (1), 
      BIRTHDAY      DATE, 
      NAME          VARCHAR2 (100)  NOT NULL, 
      ID            NUMBER (13)   NOT NULL, 
      FAC           VARCHAR2 (100)  NOT NULL, 
      RESPONSIBLE   VARCHAR2 (80), 
      TITLE         VARCHAR2 (30), 
      AVERAGE       NUMBER, 
      OBSERVATION   VARCHAR2 (100), 
      AN            VARCHAR2 (100), 
      CODE_MAT      VARCHAR2 (15)  NOT NULL, 
      MATIERE       VARCHAR2 (150)  NOT NULL, 
      TITRE         VARCHAR2 (6), 
      SC_L          VARCHAR2 (255), 
      SC_F          VARCHAR2 (255), 
      ADDRESS       VARCHAR2 (255), 
      BEN_COEF      NUMBER (5,2), 
      PERIODE       VARCHAR2 (10)  NOT NULL, 
      DIP           VARCHAR2 (100), 
      CODE_POSTAL   VARCHAR2 (20), 
      REGION        VARCHAR2 (100), 
      NAME_1        VARCHAR2 (100)  NOT NULL, 
      MARK_SESSION  VARCHAR2 (2) ) ;
    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
    CREATE OR REPLACE VIEW VIEW1 ( INSCRI, 
    YEAR_ID, LNAME, FNAME, CODE, 
    GENDER, BIRTHDAY, NAME, ID, 
    FAC, RESPONSIBLE, TITLE, AVERAGE, 
    OBSERVATION, MARKS_SESSION, AN, CODE_MAT, 
    MATIERE, TITRE, SC_L, SC_F, 
    ADDRESS, BEN_COEF, PERIODE, DIP, 
    CODE_POSTAL, REGION, NAME_1 ) AS SELECT DISTINCT
        i."ID" inscri, i."YEAR_ID",
        s."LNAME", s."FNAME", s."CODE", s."GENDER", s."BIRTHDAY",
        c."NAME",
        e."ID", e."NAME" fac, e."RESPONSIBLE", e."TITLE",
        m."AVERAGE", m."OBSERVATION", m."MARKS_SESSION",
        y."NAME" an,
        be."CODE" code_mat, be."NAME" matiere,
        sc."TITLE" titre, sc."LNAME" sc_l, sc."FNAME" sc_f, sc."ADDRESS",
        sm."BEN_COEF",
        pe."CODE" periode,
        d."NAME"dip ,
        p."CODE" code_postal, p."NAME" region,
        e2."NAME" name_1
    FROM
        inscription i, marks_det m,   student_marks sm, student s ,             std_contact sc,  benefit be,   clas c, class_type ct, entities e,            entities e1, entities e2, diploma d  , postal_code p  ,             period pe  , year y, studies st                                                 
    WHERE
        m.inscription_id=i.id  and       sm.id=m.student_marks_id   and s.id=i.student_id       and be.id =m.ben_id  and i.clas_id=c.id  and       c.class_type_id=ct.id   and e1.id=ct.entity_id        and e1.entity_id=e2.id  and e.id=i.entity_id         and st.id=m.studies_id        and d.id(+)=ct.diplom_id  and           pe.code =m.periode_id   and i.year_id =y.id       and st.period_code=m.periode_id  and      s.id=sc.student_id(+)         and sc.relation='T'   and        p.id(+)=sc.pc_id                  and i.year_id=2007   and s.code = 200750330

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    si tu fais toujours un procédure
    ça doit pas etre bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE OR REPLACE PROCEDURE modifAAAA IS
    begin
    declare
    cursor c1 IS SELECT * FROM VIEW1;
    c1row c1%rowtype;
    essaye ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE PROCEDURE modifAAAA IS
    
    cursor c1 IS SELECT * FROM VIEW1;
    c1row c1%rowtype;
    begin
    ....
    et met un ";" après ton update

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 36
    Points
    36
    Par défaut
    As tu une clé primaire pour ta table AAAAA ?

    si c'est le cas, la condtion where de ton update devrait se résumer aux champs de cette clé.

    Sinon, ne peux tu pas en déclarer une ?

  15. #15
    Membre habitué Avatar de sofien
    Inscrit en
    Février 2005
    Messages
    325
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Février 2005
    Messages : 325
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Gandahar Voir le message
    As tu une clé primaire pour ta table AAAAA ?

    si c'est le cas, la condtion where de ton update devrait se résumer aux champs de cette clé.

    Sinon, ne peux tu pas en déclarer une ?
    Salut, c'est bon c'est résolu...en fait il y'avait trop de condition !

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

Discussions similaires

  1. Mise à jour d'une ligne dans un fichier texte en php
    Par Pouchou_for_ever dans le forum Langage
    Réponses: 5
    Dernier message: 28/10/2010, 12h31
  2. Réponses: 2
    Dernier message: 21/09/2009, 15h20
  3. Réponses: 1
    Dernier message: 06/08/2009, 00h29
  4. [AC-2003] mise à jour d'une ligne dans le cas des doublon
    Par radahm dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/06/2009, 09h30
  5. [MySQL] Mise à jours de plusieurs lignes avec mysql
    Par hakou08 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/04/2009, 21h10

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