OVH Cloud OVH Cloud

comment récupere l'oid d'un insert dans une procedure stockée.

13 réponses
Avatar
Etienne SOBOLE
salut.

je cherche a faire une procedure stockée qui fasse deux INSERT.
le deuxieme necessitant le serial du premier.

comment je peut récupere l'id créé dans le premier INSERT ???
merci.

Etienne

3 réponses

1 2
Avatar
Alain Montfranc
Patrick Mevzek a écrit
Le Wed, 13 May 2009 20:23:41 +0200, Alain Montfranc a écrit:
Oui mais il peut y avoir doublons.



Non, il ne peut pas.

Le mieux est de demander d'abord une nouvelle valeur de sequence
(nextval) et de l'utiliser pour les inserts qui suivent : on est alors
assuré de l'unicité de la valeur même en cas d'exécutions en parallele



On l'est tout autant avec currval. PostgreSQL assure que c'est la
dernière valeur *de la session* courante, donc indépendamment de ce qui
se passe ailleurs. C



ok au temps pour moi. Mais comme "currentval" oblige a avoir fait
d'abord un appel à nextval ;-)

e n'est PAS la même chose qu'un select max(...) ou
équivalent.
Avatar
Patrick Mevzek
Le Wed, 13 May 2009 21:52:46 +0200, Alain Montfranc a écrit:
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait
d'abord un appel à nextval ;-)



Non plus !

Suffit d'un serial ou d'un DEFAULT nextval('...') dans la définition de
la table. La simple insertion d'un tuple entraînera l'appel à nextval()
implicite, et le currval() sera après valide.

Ou alors on fait soi-même un nextval() au début et on utilise la valeur
récupérée pour faire les INSERT. Auquel cas on n'a plus besoin de currval.

--
Patrick Mevzek . . . . . . . . . . . . . . Dot and Co
<http://www.dotandco.net/> <http://www.dotandco.com/>
<http://www.dotandco.net/ressources/icann_registrars/prices>
<http://icann-registrars-life.dotandco.net/>
Avatar
Alain Montfranc
Patrick Mevzek a écrit
Le Wed, 13 May 2009 21:52:46 +0200, Alain Montfranc a écrit:
ok au temps pour moi. Mais comme "currentval" oblige a avoir fait
d'abord un appel à nextval ;-)



Non plus !

Suffit d'un serial ou d'un DEFAULT nextval('...') dans la définition de
la table. La simple insertion d'un tuple entraînera l'appel à nextval()
implicite, et le currval() sera après valide.

Ou alors on fait soi-même un nextval() au début et on utilise la valeur
récupérée pour faire les INSERT. Auquel cas on n'a plus besoin de currval.



Oui, c'est ce que je proposais ;-)
1 2