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
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 |