1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| DECLARE
an BIGINT; -- année courante
mois SMALLINT; -- mois courant
dern_rec_str TEXT; -- dernier id en string
dern_id BIGINT := 0; -- dernier id
nouv_id BIGINT := 0; -- nouvel id
an_dern_rec_str TEXT; -- année correspondante au dernier id en string
an_dern_rec SMALLINT; -- année correspondante au dernier id
nbid INTEGER; -- nombre max d'id
BEGIN
nbid := 10 ^ nbdigit; -- nombre max d'id
an := EXTRACT(year from now());
mois := EXTRACT(month from now());
-- s'il n'y a pas de vente, on ne fait rien, dern_id == 0
IF (dern_rec IS NOT NULL) THEN
-- convertion du dernier id en string pour extraire facilement l'année et le numéro
dern_rec_str := '' || dern_rec;
-- extraction de l'année et convertion en SMALLINT pour comparaison avec l'année courante
an_dern_rec_str := SUBSTRING(dern_rec_str, 1,4);
an_dern_rec := CAST (an_dern_rec_str AS SMALLINT);
-- si le dernier id n'est pas dans l'année courante, on ne fait rien, dern_id == 0
IF (an_dern_rec >= an) THEN
-- extraction du numéro du dernier id de l'année et convertion en BIGINT pour incrémentation
dern_id := CAST(SUBSTRING(dern_rec_str, 7, nbdigit) AS BIGINT);
END IF;
END IF;
-- calcul du nouvel id
nouv_id := (an * nbid * 100) + (mois * nbid) + dern_id + 1;
RETURN nouv_id;
END; |
Partager