"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.
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
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
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
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
(supersedes <mn.12827d95686c854b.51095@x.con>)
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
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
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
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
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
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
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" <x@x.con> a écrit dans le message de news:
mn.12827d951384de29.51095@x.con...
(supersedes <mn.12827d95686c854b.51095@x.con>)
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
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
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
INSERT INTO Table1 (flu, blu)
VALUES ('foo',27)
RETURNING id INTO var;
INSERT INTO Table2 (ref, val)
VALUES (var, 'foobar');
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/>
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
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
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
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/>
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/>
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/>