Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/11/2011, 12h12   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 59
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juillet 2007
Messages : 59
Points : 10
Points : 10
Par défaut oracle + merge into

j 'essaie d'exécuter cette requête d'update :
Code :
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



Citation:

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.

zorro13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 13h05   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
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
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/11/2011, 11h05   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2007
Messages : 59
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : juillet 2007
Messages : 59
Points : 10
Points : 10
je viens de changer la requete en :
Code :
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
zorro13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 11h39   #4
Membre chevronné
 
Avatar de pinocchio
 
Homme François
Développeur informatique
Inscription : novembre 2002
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 35
Localisation : France, Yvelines (Île de France)

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

Informations forums :
Inscription : novembre 2002
Messages : 773
Points : 787
Points : 787
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
__________________
La SNCF est mon ami
blog PARIS-GRANVILLE
Inscription au panel IPSOS (possibilité d'avoir des bons d'achats)
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h59   #5
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut,

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

Citation:
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.
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/12/2011, 12h09   #6
Membre chevronné
 
Avatar de pinocchio
 
Homme François
Développeur informatique
Inscription : novembre 2002
Messages : 773
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 35
Localisation : France, Yvelines (Île de France)

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

Informations forums :
Inscription : novembre 2002
Messages : 773
Points : 787
Points : 787
Oui, en effet, j'avais mal analysé le problème.
Tu as raison.
__________________
La SNCF est mon ami
blog PARIS-GRANVILLE
Inscription au panel IPSOS (possibilité d'avoir des bons d'achats)
pinocchio est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h24.


 
 
 
 
Partenaires

Hébergement Web