PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 18/02/2021 19:03:37

tchazou
Membre

Technique

Bonjour à tous,
Je viens de commencer avec Postgresql, j'ai utilisé plusieurs autres bases de données et je voudrai savoir s'il est possible après un "UPDATE/INSERT/DELETE" de connaitre le nombre d'enregistrements affectés.
Cette instruction existe dans d'autre gestionnaires de BD.
Merci pour votre assistance.

Hors ligne

#2 18/02/2021 19:09:07

gleu
Administrateur

Re : Technique

La base de données renvoie cette information. C'est ainsi que les outils comme pgadmin, psql, etc peuvent l'afficher.


Guillaume.

Hors ligne

#3 18/02/2021 21:32:36

Re : Technique

tchazou a écrit :

Bonjour à tous,
Je viens de commencer avec Postgresql, j'ai utilisé plusieurs autres bases de données et je voudrai savoir s'il est possible après un "UPDATE/INSERT/DELETE" de connaitre le nombre d'enregistrements affectés.
Cette instruction existe dans d'autre gestionnaires de BD.
Merci pour votre assistance.

En Pl/PgSQL :

https://www.postgresql.org/docs/13/plpg … IAGNOSTICS

Hors ligne

#4 22/02/2021 13:12:11

tchazou
Membre

Re : Technique

Bonjour,
J'ai lu ceci https://www.postgresql.org/docs/13/plpg … IAGNOSTICS j'aimerai avoir un bout de code en utilisant la commande UPDATE....FOUND.....//MERCI

Hors ligne

#5 22/02/2021 13:22:20

rjuju
Administrateur

Re : Technique

Il y a un exemple d'utilisation indiqué à https://www.postgresql.org/docs/13/plpg … IAGNOSTICS.  Quel problème rencontrez-vous ?

Hors ligne

#6 23/02/2021 09:46:44

tchazou
Membre

Re : Technique

Bjr regarder ce bout de code:

j'ai une creer une fonction compte() qui doit en fait me renvoyer le nombre d'enregistrement affecté par une instruction UPDATE/INSERT. Le resultat obtenu dépend de l'endroit ou est placé le UPDATE/INSERT

DECLARE
  nbre integer;
BEGIN
  insert into ffamille(codfam,codsfam,desigfamss)values('17','17','AROMES');
  GET DIAGNOSTICS nbre = ROW_COUNT;
  RAISE NOTICE E'--- Call nbre ---\n%', nbre;
  RETURN nbre;
END;
Lorsque l'instruction  INSERT/UPDATE est à l’intérieur de la fonction comme ci-haut le résultat renvoyé est 1 et c'est correct.

Par contre si je fait plutôt ceci:
DECLARE
  stack integer;
BEGIN
   GET DIAGNOSTICS stack = ROW_COUNT;
  RAISE NOTICE E'--- Call Stack ---\n%', stack;
  RETURN stack;
END;

ensuite j’exécute les deux requêtes suivantes:

insert into ffamille(codfam,codsfam,desigfamss)values('17','17','AROMES');
select compte();
le résultat renvoyé est 0. Ce qui n'est pas bon.

Ou se trouve  l'erreur s'il vous plait!

Hors ligne

#7 23/02/2021 10:14:57

rjuju
Administrateur

Re : Technique

Vous ne pouvez pas utiliser GET DIAGNOSTICS de cette façon, l'instruction n'est valide que durant l'exécution d'une procédure stockée.

Comme Guillaume l'a déjà indiqué, pour une exécution normale postgres renvoie déjà l'information, et votre client a accès à l'information.  Par exemple avec psql:

=# insert into t1 values (1), (2);
INSERT 0 2

=# \echo :ROW_COUNT
2

Le dernier "2" dans "INSERT 0 2" donne le nombre d'enregistrements affectés, qui est également disponible dans la variable :ROW_COUNT.  Vous devez donc consulter la documentation de votre outil / framework pour savoir comment récupérer l'information.

Hors ligne

Pied de page des forums