Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

10 réponses

1 2
Avatar
Sylvain SF
Etienne SOBOLE a écrit :

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



sur quel moteur ?
LAST_INSERT_ID si c'est MySQL.

Sylvain.
Avatar
Etienne SOBOLE
nan c'est postregsql...

"Sylvain SF" a écrit dans le message de news:
49f8c971$0$17070$
Etienne SOBOLE a écrit :

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



sur quel moteur ?
LAST_INSERT_ID si c'est MySQL.

Sylvain.
Avatar
Alain Montfranc
Etienne SOBOLE a écrit
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



ATTENTION :

Le type oid est actuellement un entier de quatre octets. Il n'est pas
suffisamment grand pour garantir l'unicité dans une grosse base de
données, voire même dans une très grosse table.

Donc a eviter

Le mieux serait sans doute d'utiliser une sequence, de recuperer un
nouveau numéro en début de procedure stockée et de l'utiliser comme
clef unique des données insérées

http://docs.postgresql.fr/8.3/datatype-oid.html
Avatar
Alain Montfranc
(supersedes )

Etienne SOBOLE a écrit
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



ATTENTION :

Le type oid est actuellement un entier de quatre octets. Il n'est pas
suffisamment grand pour garantir l'unicité dans une grosse base de
données, voire même dans une très grosse table.
(http://docs.postgresql.fr/8.3/datatype-oid.html)

Donc a eviter

Le mieux serait sans doute d'utiliser une sequence, de recuperer un
nouveau numéro en début de procedure stockée et de l'utiliser comme
clef unique des données insérées
Avatar
Jogo
Sur fr.comp.applications.sgbd, Etienne SOBOLE disait :

nan c'est postregsql...



Bon alors si c'est au moins une version 8.2, tu peux peut-être
utiliser RETURNING :

INSERT INTO Table1 (flu, blu)
VALUES ('foo',27)
RETURNING id;

Et tu gères ça comme un select dans le langage client (donc avec un
truc comme fetchrow).

Si tu fais du PL/PgSQL, alors c'est :

INSERT INTO Table1 (flu, blu)
VALUES ('foo',27)
RETURNING id INTO var;

INSERT INTO Table2 (ref, val)
VALUES (var, 'foobar');

--
Il n'est personne aujourd'hui, de vraiment cultivé,
pour parlé de la beauté d'un couché de soleil.
-- Wilde
Avatar
Etienne SOBOLE
Heu oui effectivement tu as raison.

Ce dont j'ai besoin c'est du serial...
mais habituellement je fais un

INSERT ...
SELECT idtable FROM table WHERE oid = OID_OBTENU;

comment recupère t on un serial sans passer par cette methode ???

merci.
Etienne

"Alain Montfranc" a écrit dans le message de news:

(supersedes )

Etienne SOBOLE a écrit
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



ATTENTION :

Le type oid est actuellement un entier de quatre octets. Il n'est pas
suffisamment grand pour garantir l'unicité dans une grosse base de
données, voire même dans une très grosse table.
(http://docs.postgresql.fr/8.3/datatype-oid.html)

Donc a eviter

Le mieux serait sans doute d'utiliser une sequence, de recuperer un
nouveau numéro en début de procedure stockée et de l'utiliser comme clef
unique des données insérées


Avatar
Etienne SOBOLE
INSERT INTO Table1 (flu, blu)
VALUES ('foo',27)
RETURNING id INTO var;

INSERT INTO Table2 (ref, val)
VALUES (var, 'foobar');



Ah... merci.

je vais essayer ca.
Etienne
Avatar
Patrick Mevzek
Le Wed, 13 May 2009 13:32:42 +0200, Etienne SOBOLE a écrit:
Ce dont j'ai besoin c'est du serial... mais habituellement je fais un

INSERT ...
SELECT idtable FROM table WHERE oid = OID_OBTENU;

comment recupère t on un serial sans passer par cette methode ???



SELECT currval('lenomdelasequence');

--
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 13:32:42 +0200, Etienne SOBOLE a écrit:
Ce dont j'ai besoin c'est du serial... mais habituellement je fais un

INSERT ...
SELECT idtable FROM table WHERE oid = OID_OBTENU;

comment recupère t on un serial sans passer par cette methode ???



SELECT currval('lenomdelasequence');



Oui mais il peut y avoir doublons.

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
Avatar
Patrick Mevzek
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. Ce n'est PAS la même chose qu'un select max(...) ou
équivalent.

--
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/>
1 2