Vous n'êtes pas identifié(e).

#1 08/11/2010 14:13:52

LeHibou
Membre

Sequence Lettre + chiffres

Bonjour à tous,

Cela faisait longtemps mais je reviens sur le "faux rhum" afin d'éclaircir un point.

Comment avoir une séquence du type A101, A102,...,An ?

Tout d'abord, je tiens à signaler que tout le reste de a base semble bien aller (je l'ai améliorée depuis) mais voici le trigger dont je dispose :

CREATE OR REPLACE FUNCTION "Facturation"."Trigg_valeur"() RETURNS trigger AS
$BODY$begin
perform "Execution"
From "Facturation"."Execution";

if ((new."Type" = 'Devis') and (tg_op = 'INSERT'))
then new."Num_" = nextval('"Facturation"."Seq_id_Devis"'::regclass); 

elsif ((new."Type" = 'Facture') and (tg_op = 'INSERT'))
then new."Num_" = nextval('"Facturation"."Seq_id_Facture"'::regclass);

elsif ((new."Type" = 'Acompte') and (tg_op = 'INSERT'))
then new."Num_" = nextval('"Facturation"."Seq_id_Acompte"'::regclass);

end if;

return new;

end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

et voici une de mes séquences de test :

SELECT setval('"Facturation"."Seq_id_Acompte"', 100, true);

J'ai tenté -bien- des choses (mettre  dans le trigger : 'A'nextval..., 'A'+nextval... ) mais j'obtiens toujours une erreur (qui a dit "évidemment" ?).

Voyez-vous comment je pourrais avoir un code du type A101, A102,...,An svp ?

J'attends vos réponses,

A bientôt,

Le Hibou

Dernière modification par LeHibou (08/11/2010 14:14:19)

Hors ligne

#2 08/11/2010 15:35:32

Marc Cousin
Membre

Re : Sequence Lettre + chiffres

"mais j'obtiens toujours une erreur (qui a dit "évidemment" ?)."

Quelle erreur ? Et le code ressemble à quoi ?

Un dernier détail: l'opérateur de concaténation, c'est || en SQL? donc c'est 'A'||nextval que vous voulez, voire 'A'||nextval::text pour être explicite, puisque vous concaténez évidemment deux chaînes de caractères.


Marc.

Hors ligne

#3 08/11/2010 16:35:47

LeHibou
Membre

Re : Sequence Lettre + chiffres

Marc Cousin,

Vous venez de répondre à mon interrogation. Cela fonctionne parfaitement.

Pour les autres que cela intéresserait, on peut s'inspirer du code ci-dessous, pour avoir un trigger activant une séquence de type Lettre+Chiffres (A100, A101...,An), en fonction d'une entrée (ici, acompte) il faut donc faire :

Trigger :

CREATE OR REPLACE FUNCTION "Facturation"."Trigg_valeur"() RETURNS trigger AS
$BODY$begin
perform "Execution"
From "Facturation"."Execution";

if ((new."Type" = 'Devis') and (tg_op = 'INSERT'))
then new."Num_" = nextval('"Facturation"."Seq_id_Devis"'::regclass); 

elsif ((new."Type" = 'Acompte') and (tg_op = 'INSERT'))
then new."Num_" = 'A'||nextval('"Facturation"."Seq_id_Acompte"'::regclass);

end if;

return new;

end;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

et la séquence :

SELECT setval('"Facturation"."Seq_id_Acompte"', 100, true);

Je vous remercie de votre réactivité et de l'efficacité de votre compétence,

A bientôt,

Le Hibou

Hors ligne

Pied de page des forums