Re: ordre

From: "J(dot)Pierre Pourrez" <ptc1(at)free(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: ordre
Date: 2005-03-03 10:02:03
Message-ID: pan.2005.03.03.10.01.57.987629@free.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Le Wed, 02 Mar 2005 16:44:53 +0100, Wilk a écrit :

> "Masse Jacques" <jacques(dot)masse(at)bordeaux(dot)cemagref(dot)fr> writes:
>
>> A priori, l'ordre de consultation est donné par les requetes. L'ordre
>> des tables n'a pas d'importance, toutefois la déclaration d'index sur
>> une ou plusieurs colonnes accelere notablement l'execution des requetes.
>>
>> En déclarant un champ SERIAL, ce champ est incremente automatiquement
>> à chaque nouvelle insertion
>
> Merci mais je n'ais pas du bien m'exprimer, ce n'est pas du tout ça ma
> question...
> Je parle d'un champ "ordre" qui défini l'ordre des lignes (de factures
> par ex).
> C'est à dire :
> ordre code qte prix
> 1 ar10 5 10
> 2 ar20 2 20
> ...
>
> Et ma question était de savoir s'il y a moyen avec les triggers ou autre
> de gérer le champ ordre autrement que par programme "classique".

il faut utiliser le type serial pour la colonne ordre. la valeur de ordre
s'auto-incrémentera à chaque commande insert.

Reste à savoir si on tient absolument à ce que ordre soit affiché à
partir de 1 pour chaque facture.

-----------8<--------8<------------8<-----------------
CREATE TABLE ligne (
id serial PRIMARY KEY,
art_id character(6) NOT NULL,
lig_qte integer NOT NULL,
art_prix integer ,
fac_id integer NOT NULL
);

-- on crée un petit jeu d'essai
INSERT INTO ligne(fac_id, art_id,lig_qte,art_prix) values(1,'PCR06CO',3,34);
INSERT INTO ligne(fac_id, art_id,lig_qte,art_prix) values(1,'PCR06C',3,34);
INSERT INTO ligne(fac_id, art_id,lig_qte,art_prix) values(1,'PCR06D',6,54);
INSERT INTO ligne(fac_id, art_id,lig_qte,art_prix) values(1,'PCR06E',10,88);
INSERT INTO ligne(fac_id, art_id,lig_qte,art_prix) values(2,'PBR06E',30,82);
INSERT INTO ligne(fac_id, art_id,lig_qte,art_prix) values(2,'PBS06E',45,108);
INSERT INTO ligne(fac_id, art_id,lig_qte,art_prix) values(2,'PBS16E',25,99);

-- table bidon pour donner un format à la sortie de la fonction facture
CREATE TABLE ligne_detail (id integer, art_id char(6), lig_qte integer, art_prix integer);

-- renumérotation des lignes de la facture à partir de 1
CREATE FUNCTION facture(integer) RETURNS SETOF ligne_detail
AS 'select
id-(SELECT MIN(id) FROM ligne WHERE fac_id=$1)+1, art_id,
lig_qte, art_prix FROM ligne WHERE fac_id=$1 ORDER BY id;'
LANGUAGE sql;

-- afficher les lignes de la facture n°2
select * from facture(2);

----------8<-----8<---------8---------------------------------------

En espérant que cela aide
Jean-Pierre

In response to

Responses

  • Re: ordre at 2005-03-03 11:24:05 from J.Pierre Pourrez
  • Re: ordre at 2005-03-03 23:30:04 from J.Pierre Pourrez

Browse pgsql-fr-generale by date

  From Date Subject
Next Message J.Pierre Pourrez 2005-03-03 11:24:05 Re: ordre
Previous Message Wilk 2005-03-02 15:44:53 Re: ordre