| 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: | Whole Thread | Raw Message | 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
| 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 |