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 :

Problème Requête Update


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 77
    Points : 51
    Points
    51
    Par défaut Problème Requête Update
    Bonjour,

    Voici une requête d'update qui semble correcte du point de vue de la syntaxe, mais qui refuse de s'exécuter...

    si vous pouvez m'aider...

    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
    UPDATE
      APOGEE.ELP_CHG_TYP_HEU
    SET
      APOGEE.ELP_CHG_TYP_HEU.COD_COLL_TH=APOGEE.COLLECTION.COD_COL
    WHERE
      (APOGEE.ELP_CHG_TYP_HEU.COD_ELP,APOGEE.ELP_CHG_TYP_HEU.COD_TYP_HEU,APOGEE.ELP_CHG_TYP_HEU.COD_ANU) IN
    ( SELECT DISTINCT
        apogee.element_pedagogi.cod_elp,
        apogee.elp_chg_typ_heu.cod_typ_heu,
        apogee.elp_charge_ens.cod_anu,
        apogee.collection.cod_col
    FROM
        apogee.collection
        INNER JOIN apogee.groupe ON apogee.collection.cod_col = apogee.groupe.cod_col
        INNER JOIN apogee.gpe_obj ON apogee.groupe.cod_gpe = apogee.gpe_obj.cod_gpe
        INNER JOIN apogee.elp_chg_typ_heu ON apogee.elp_chg_typ_heu.cod_elp = apogee.gpe_obj.cod_elp
                                             AND apogee.elp_chg_typ_heu.cod_typ_heu = apogee.groupe.cod_tgr
        INNER JOIN apogee.elp_charge_ens ON apogee.elp_charge_ens.cod_elp = apogee.elp_chg_typ_heu.cod_elp
                                            AND apogee.elp_charge_ens.cod_anu = apogee.elp_chg_typ_heu.cod_anu
        INNER JOIN apogee.element_pedagogi ON apogee.element_pedagogi.cod_elp = apogee.elp_charge_ens.cod_elp
    WHERE
        apogee.elp_charge_ens.cod_anu = '2018'
        AND apogee.elp_charge_ens.tem_cal_chg = 'O'
        AND apogee.elp_chg_typ_heu.nbr_grp_th_mod IS NULL
        AND ( apogee.collection.daa_fin_col IS NULL
              OR apogee.collection.daa_fin_col >= 2018 )
        AND apogee.groupe.cod_cgp IS NULL
    );

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 125
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par chris76 Voir le message
    Voici une requête d'update qui semble correcte du point de vue de la syntaxe, mais qui refuse de s'exécuter...
    comment sait-tu que ça ne s'exécute pas? il y'a une message d'erreur? , si oui quel est ce message? tu utilise quel SGBD et quel outil pour l'exécution de ta requête? donc aide nous à t'aider STP.


    Première remarque, il faut utiliser les alias pour te faciliter la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    UPDATE
      APOGEE.ELP_CHG_TYP_HEU ae
    SET
      ae.COD_COLL_TH = ac.COD_COL
     
    …….
     
    …….
     
        FROM APOGEE.COLLECTION ac

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Pour l'outil, c'est un SQL Developper 18.3, sur de l'Oracle.

    Le message, en gros, il dit qu'il ne trouve pas la table Collection...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Voici le message d'erreur :
    Erreur à la ligne de commande: 32 Colonne: 31
    Rapport d'erreur -
    Erreur SQL : ORA-00904: "COLLECTION"."COD_COL" : identificateur non valide
    00904. 00000 - "%s: invalid identifier"
    *Cause:
    *Action:

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Je précise que le "select" seul marche parfaitement, et me ramène bien les données...

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    C'est tout à fait normal. La table APOGEE.COLLECTION n'est que dans la sous-requête, tu ne peux donc pas l'utiliser dans la clause SET.

    Tatayo.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Ok merci, mais du coup, comment faire ?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    D'après l'aide en ligne d'Oracle, ce dernier ne support ni les jointures dans un UPDATE, ni le MERGE.
    Donc je dirais qu'il faut une sous-requête dans la clause SET:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE
      APOGEE.ELP_CHG_TYP_HEU
    SET
      APOGEE.ELP_CHG_TYP_HEU.COD_COLL_TH = (select ...)
    where ...

    Edit: visiblement Oracle supporte le MERGE, j'ai certainement mal cherché dans l'aide...

    Tatayo.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    ok merci, j'essaierai ça.

    Pour info, un collègue m'a résolu le pb avec un MERGE :

    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
    MERGE INTO ELP_CHG_TYP_HEU A
    USING (SELECT DISTINCT element_pedagogi.cod_elp, elp_chg_typ_heu.cod_typ_heu, elp_charge_ens.cod_anu, collection.cod_col
            FROM
            collection
                INNER JOIN groupe ON collection.cod_col = groupe.cod_col
                INNER JOIN gpe_obj ON groupe.cod_gpe = gpe_obj.cod_gpe
                INNER JOIN elp_chg_typ_heu ON elp_chg_typ_heu.cod_elp = gpe_obj.cod_elp AND elp_chg_typ_heu.cod_typ_heu = groupe.cod_tgr
                INNER JOIN elp_charge_ens ON elp_charge_ens.cod_elp = elp_chg_typ_heu.cod_elp AND elp_charge_ens.cod_anu = elp_chg_typ_heu.cod_anu
                INNER JOIN element_pedagogi ON element_pedagogi.cod_elp = elp_charge_ens.cod_elp
            WHERE elp_charge_ens.cod_anu = '2018'
            AND elp_charge_ens.tem_cal_chg = 'O'
            AND elp_chg_typ_heu.nbr_grp_th_mod IS NULL
            AND ( collection.daa_fin_col IS NULL OR collection.daa_fin_col >= 2018 )
            AND groupe.cod_cgp IS NULL) B
    ON (A.COD_ELP = B.COD_ELP AND A.COD_TYP_HEU = B.COD_TYP_HEU AND A.COD_ANU = B.COD_ANU)
    WHEN MATCHED THEN UPDATE SET A.COD_COLL_TH = B.COD_COL;
    Je ne connaissais pas du tt cette fonction, mais le principal est que ça marche au final.

    Merci pour votre aide.

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

Discussions similaires

  1. Problème requète update, sql server 2000
    Par Guena5635 dans le forum Développement
    Réponses: 3
    Dernier message: 28/04/2008, 10h32
  2. [Débutant] Problème requête Update
    Par aure298 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 02/01/2008, 16h54
  3. [C#] Problème requête update via OdbcDataAdpter
    Par LE NEINDRE dans le forum ASP.NET
    Réponses: 12
    Dernier message: 16/06/2006, 11h52
  4. Problème Requête UPDATE (ou pas)
    Par mastasushi dans le forum Access
    Réponses: 7
    Dernier message: 03/05/2006, 08h42
  5. [MySQL] problème requête UPDATE
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/10/2005, 18h28

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