Précédent   Forum du club des développeurs et IT Pro > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/07/2012, 10h21   #1
gallab
Invité régulier
 
Homme Gallien LABEYRIE
Géomaticien / Développeur
Inscription : juin 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Gallien LABEYRIE
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Géomaticien / Développeur
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2010
Messages : 13
Points : 8
Points : 8
Par défaut RETURNING ID et TRANSACT

Bonjour,

Je souhaite faire une requête d'insert qui comporte un retour sur les identifiants nouvellement insérés.

Voilà la requête :
Code :
INSERT INTO TABLE(operateur) VALUES ('tata') ,('toto') RETURNING id;
je souhaite exécuter ma requête dans une transaction, mais curieusement dans ce cas je n'arrive plus à récupérer les ID des enregistrements insérés

Code :
1
2
3
BEGIN TRANSACTION;
INSERT INTO TABLE(operateur) VALUES ('tata') ,('toto') RETURNING id; 
END TRANSACTION;
Je ne vois pas trop d'où cela peut venir, avez vous une idée ?

Merci d'avance
cordialement,
Gallien LABEYRIE
gallab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2012, 12h37   #2
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
Etre dans une transaction ou non ne change rien à RETURNING
Exemple:


test=> create table trans(id serial,op text);
NOTICE:  CREATE TABLE will create implicit sequence "trans_id_seq" for serial column "trans.id"
CREATE TABLE
test=> begin;
BEGIN
test=> insert into trans(op) values('ab'),('cd') returning id;
 id 
----
  1
  2
(2 rows)

INSERT 0 2

test=> commit;
COMMIT
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2012, 15h31   #3
gallab
Invité régulier
 
Homme Gallien LABEYRIE
Géomaticien / Développeur
Inscription : juin 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Homme Gallien LABEYRIE
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Géomaticien / Développeur
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2010
Messages : 13
Points : 8
Points : 8
Merci pour ta réponse, je trouve en effet curieux que la transaction puisse masquer les ids retournés.
Malheureusement je n'y arrive toujours pas! Ni sur PGAdmin, ni sur mon script PHP.
Je pense que mon problème vient plutôt du script censé recupérés les identifiants des enregistrements créé mais je ne vois pas du tout d'où cela peut venir car cela reste ultra basique du genre...

Code :
1
2
3
4
5
6
7
8
$result = pg_query($sql);
IF($result)
{
  while($row = pg_fetch_assoc($result))
  {  
     echo $row['id'];
  }
}
gallab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2012, 15h51   #4
estofilo
Modérateur
 
Inscription : octobre 2008
Messages : 1 702
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 702
Points : 2 347
Points : 2 347
Ca ne dit pas ce que ça fait à l'exécution.
Ca ne rentre pas dans le IF? Ca ne rentre pas dans le while?
Ca affiche quelque chose ou rien?

Eventuellement essaye print_r($row) pour voir toute la ligne renvoyée
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h25.


 
 
 
 
Partenaires

Hébergement Web