Bonsoir,
J'essai de faire une mise à jour via update or insert utilisant des CTE (si j'ai bien compris ^^) seulement j'ai une parsing error sur mon "update"

voici ma requete :
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
begin
with
/**************************************************************************/
/* fournit la date de la derniere facture du mois passé en paramètre */
date_facture as (
  select  t_entetefacture.datecreation as datefacture, t_entetefacture.numclifour as numclifour
    from t_entetefacture inner join t_clifour on (t_entetefacture.numclifour = t_clifour.numclifour)
    where extract(month from t_entetefacture.datecreation) = :mois and t_clifour.reglement = 'T')
    ,
/***************************************************************************/
/* fournit la somme des montants des factures du mois fournit en paramètre */
    somme_factures as (
  select sum(t_entetefacture.mtpayablettc) as montant, t_clifour.numclifour from t_entetefacture
    inner join t_clifour on (t_entetefacture.numclifour = t_clifour.numclifour)
    where extract(month from t_entetefacture.datecreation) = :mois and t_clifour.reglement = 'T' group by t_clifour.numclifour)
/***************************************************************************/
update or insert into t_reglement ( t_reglement.numclifour,t_reglement.moderegle, t_reglement.dateecheance,
                                    t_reglement.montant, T_reglement.banque, t_reglement.codbanque, t_reglement.codguichet,
                                    t_reglement.numcompte,t_reglement.clerib, t_reglement.typecriture)
values(
    select  t_clifour.numclifour, t_clifour.reglement, dateadd(day, -1,
            dateadd(month, t_clifour.echeance + 1, '01.' || :mois ||'.'|| extract(year from (
             select first 1 date_facture.datefacture from date_facture order by date_facture.datefacture desc)))) as dateecheance,
            somme_factures.montant, t_banques.banque, t_banques.codebanque, t_banques.codeguichet, t_banques.numcompte,t_banques.cle,
            'G'
            from t_clifour  inner join t_banques on (t_clifour.numclifour = t_banques.numclifour)
                        inner join somme_factures on (t_clifour.numclifour = t_somme_factures.numclifour)
                        inner join date_facture on (t_clifour.numclifour = date_facture.numclifour)
            where t_banques.modregleactif = 'O')
matching (t_reglement.numclifour,  t_reglement.dateecheance);
end
est ce possible ? est ce que je m'y prend mal (surement ) ?