Vous n'êtes pas identifié(e).
Pages : 1
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
"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
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
Pages : 1