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 21/12/2011 10:54:53

vincent29
Membre

Recuperer un serail lors d'une transaction

Bonjour à tous,

Débutant sous postgresql je rencontre un problème lors d'une transaction :

Je possède deux tables que voici :


CREATE TABLE entete
(
  entete_code serial NOT NULL,
  entete_date_deb timestamp without time zone NOT NULL,
  entete_date_fin timestamp without time zone NOT NULL,
  entete_volume_eau real,
  entete_surface real,
  CONSTRAINT pk_entete PRIMARY KEY (entete_code),
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

CREATE TABLE ligne
(
  ligne_code serial NOT NULL,
  ligne_quantite_employee real NOT NULL,
  entete_ligne_code integer NOT NULL,
  CONSTRAINT pk_ligne PRIMARY KEY (ligne_code),
  CONSTRAINT fk_entete_code FOREIGN KEY (entete_code)
      REFERENCES entete (entete_code) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

Ces deux tables sont alimentées par un formulaire. Je souhaite faire une transaction afin que l'enregistrement dans la table "entete" ne soit pas sauvegardé si un probleme est rencontré lors de l'insertion des données dans la table "ligne".

Mon probleme est que lors de l'insertion de donnée dans ma table "ligne" je ne sais pas comment obtenir la valeur du champs "entete_ligne_code" étant donné qu'il s'agit d"une clé étrangere faisant reference au champ "entete_code" de la table "entete" et que celui ci est de type "serial".

Je voulais donc savoir s'il était possible de récuperer un serial dans une transaction.

Merci de vos futures réponses

Hors ligne

#2 21/12/2011 11:08:02

flo
Membre

Re : Recuperer un serail lors d'une transaction

Dans l'insert de la première table, tu peux utiliser la clause RETURNING :

http://docs.postgresqlfr.org/9.1/sql-insert.html

Hors ligne

#3 21/12/2011 11:25:00

vincent29
Membre

Re : Recuperer un serail lors d'une transaction

Je vais pouvoir m'en sortir avec ça.
Merci beaucoup pour la rapidité et l'efficacité de ta réponse.

Hors ligne

Pied de page des forums