Bonjour,
j'ai un soucis avec ma requête merge.
Cette requête fonctionne :
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, 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
et me renvoie l'erreur ORA-30926.
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
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 ?
Partager