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 :

oracle + merge into


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    MOE
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : MOE

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Par défaut oracle + merge into
    j 'essaie d'exécuter cette requête d'update :
    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
     
    merge into  Suivi_production_FH sph  
        using (
     
    		SELECT 
        g.noseg , 
        g.sphver,
        g.NOCANAL,
        eec.L_OPID,
        eec.Reference_ARCEP, 
        eec.Date_statut,
        eec.Numero_canal
     
    		FROM G2RTRANS1 g , Ellipse_extraction_CAF eec where eec.Numero_canal =  g.NOCANAL 
        ) gr
     
        on (
        gr.noseg = sph.segment_G2R
        and gr.SPHVER = sph.SPHVER_G2R
        and gr.L_OPID = sph.segment_G2R )
     
     
             	when  matched then UPDATE 
     
              SET sph.avis_ARCEP = gr.Reference_ARCEP
     
    where    sph.OT != 0   and NVL(sph.segment_G2R,0) != 0
    mais j 'ai toujours ce message d'erreur




    Rapport d'erreur :
    Erreur SQL : ORA-30926: impossible d'obtenir un ensemble de lignes stables dans les tables source
    30926. 00000 - "unable to get a stable set of rows in the source tables"
    *Cause: A stable set of rows could not be got because of large dml
    activity or a non-deterministic where clause.
    *Action: Remove any non-deterministic where clauses and reissue the dml.


  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,


    il y a de grande chance que votre clause ON ne permete pas à oracle de définir une relation 1:1 ou 1:0 entre votre table à updater et la sous-requête.

    De ce fait il ne sait pas quoi faire car il doit y avoir de multiple gr.Reference_ARCEP possible pour 1 ligne de votre table Suivi_production_FH

  3. #3
    Membre confirmé
    Profil pro
    MOE
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : MOE

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Par défaut
    je viens de changer la requete en :
    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
     
    	merge into  Suivi_production_FH sph  
        using (
     
    		SELECT 
     
        g.noseg, 
        g.sphver,
        g.NOCANAL,
        eec.Numero_canal,
        eec.Reference_ARCEP,
        eec.L_OPID
    		FROM G2RTRANS1 g , Ellipse_extraction_CAF eec where eec.Numero_canal =  g.NOCANAL 
     
       ORDER BY  eec.L_OPID DESC, eec.Version DESC, eec.Date_statut DESC , eec.Reference_ARCEP DESC
     
        ) gr
     
        on ( gr.noseg = sph.segment_G2R and gr.SPHVER = sph.SPHVER_G2R)
     
     
             	when  matched then UPDATE 
     
              SET sph.avis_ARCEP = gr.Reference_ARCEP
     
            where    sph.OT != 0   and NVL(sph.segment_G2R,0) != 0 and gr.L_OPID = sph.segment_G2R
     
     
     
             	when  matched then UPDATE 
     
              SET sph.avis_ARCEP = 'Segment FH inconnu de l ARCEP'
     
           where    sph.OT != 0   and NVL(sph.segment_G2R,0) != 0 and gr.L_OPID != sph.segment_G2R
    Par contre, je viens bien de remarquer qu ' il existe plusieurs enregistrement

    Y a t il un moyen de recuperer juste le 1 element de chaque L_OPID

  4. #4
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Pour cela tu rajoutes dans ta clause where Mais est-il logique de faire cette spécification alors que tu fais une mise à jour ensuite?
    Cordialement

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut,

    Pinocchio, ROWNUM = 1 n'est pas bon à mon avis. Car :

    Y a t il un moyen de recuperer juste le 1 element de chaque L_OPID
    Il faut soit utiliser GROUP BY plus max, keep et tout ça, soit utiliser de l'analytique avec ROW_NUMBER.

  6. #6
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Oui, en effet, j'avais mal analysé le problème.
    Tu as raison.

Discussions similaires

  1. Fonction SQL & MERGE INTO
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 2
    Dernier message: 02/12/2009, 15h29
  2. Transcrire "Merge into"
    Par Ndrmar dans le forum SQL
    Réponses: 6
    Dernier message: 11/09/2008, 12h24
  3. SQL Merge into - delete ne marche pas
    Par Javotte dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/06/2008, 09h29
  4. Réponses: 4
    Dernier message: 11/10/2007, 08h51
  5. 9i : problème avec MERGE INTO
    Par Vld44 dans le forum SQL
    Réponses: 1
    Dernier message: 16/08/2007, 11h27

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