ORA-30926 : comment contourner
Bonjour,
j'ai un soucis avec ma requête merge.
Cette requête fonctionne :
Code:
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:
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 ?