
PostgreSql met à notre disposition les variables de diagnostic qui permettent de savoir facilement combien de lignes ont été impactées par un update, un select ou toute autre requête SQL.
Cette technique est très pratique simplifier par exemple des logiques algorithmiques du type :
- Si cette donnée existe on l'update
- Si elle n'existe pas on l'ajoute
Dans l'exemple ci dessous nous allons utiliser cette logique sur une table facture paiement (si l'update n'impacte aucune ligne ... on en déduit que la table ne contient pas nos données et donc on peut les ajouter). Le code ci dessous fonctionne dans une procédure stockée :
montant_utilise = 450;
----- on tente d'updater la table
UPDATE facturepaiement
SET montant_ventile = montant_utilise
WHERE id_facture = recordset.id
AND id_paiement = rspaiements.id_paiement;
-- on récupère le nombres de lignes impactées par l'update
GET DIAGNOSTICS nbLignes = ROW_COUNT;
-- Si cuaune ligne impactée ... on peut ajouter
IF (nbLignes=0) THEN
INSERT INTO facturepaiement (id_facture, id_paiement, montant_ventile)
VALUES(recordset.id,rspaiements.id_paiement, montant_utilise );
END IF;