Bonjour,

j'ai un soucis avec ma requête merge.
Cette requête fonctionne :
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
 
MERGE INTO invoice t
USING (                            
    SELECT i.product_code,
       max(f.prs_ssa) KEEP(DENSE_RANK LAST ORDER BY f.date_facture) prs_ssa, 
       max(f.csc) KEEP(DENSE_RANK LAST ORDER BY f.date_facture) csc, 
       max(f.prg) KEEP(DENSE_RANK LAST ORDER BY f.date_facture) prg     
    FROM invoice i 
      JOIN factures f 
        ON i.product_code = f.code_article
        AND i.invoice_date < f.date_facture
    WHERE (i.csc_euro IS NULL 
        OR i.prg_euro IS NULL
        OR i.prs_ssa_euro IS NULL)
    GROUP BY i.product_code
       ) s
ON (t.product_code = s.product_code) 
WHEN MATCHED THEN UPDATE SET t.prs_ssa_euro = s.prs_ssa, t.csc_euro = s.csc, t.prg_euro = s.prg
par contre celle ci ne fonctionne pas :
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
 
MERGE INTO invoice t
USING (                            
    SELECT i.product_code, f.quantite, i.quantity,
       max(f.prs_ssa) KEEP(DENSE_RANK LAST ORDER BY f.date_facture) prs_ssa, 
       max(f.csc) KEEP(DENSE_RANK LAST ORDER BY f.date_facture) csc, 
       max(f.prg) KEEP(DENSE_RANK LAST ORDER BY f.date_facture) prg     
    FROM invoice i 
      JOIN factures f 
        ON i.product_code = f.code_article
        AND i.invoice_date < f.date_facture
    WHERE (i.csc_euro IS NULL 
        OR i.prg_euro IS NULL
        OR i.prs_ssa_euro IS NULL)
    GROUP BY i.product_code, f.quantite, i.quantity
       ) s
ON (t.product_code = s.product_code) 
WHEN MATCHED THEN UPDATE SET t.prs_ssa_euro = s.prs_ssa / s.quantite * s.quantity, t.csc_euro = s.csc / s.quantite * s.quantity, t.prg_euro = s.prg / s.quantite * s.quantity
et me renvoie l'erreur ORA-30926.
Le calcul effectué pour l'update est OBLIGATOIRE, mais il peut être déplacé autre part dans la requête si besoin est pour contourner l'erreur.
Le problème est qu'apparemment il existe plusieurs lignes pour la même date et avec le même code produit qui ont des quantités différentes.


Comment feriez vous (sachant que les 2 tables n'ont pas de clé primaires) pour que la requête fonctionne ?