Bonjour à tous,
Je souhaite insérer dans une table BARTEST composée des colonnes
- BARCODE
- NAME
un BARCODE au format EAN13 calculé par la procédure ID2EAN13
l'insertion étant effectuée par le trigger TRGBARTESTEAN au moment de la création de l'enregistrement
lui même s'appuyant sur le générateur GENBARTESTEAN
1/ (Vous ne m'en voudrez pas trop pour le choix des noms )
2/ Est-ce possible ?
> (la procédure stockée semble correcte par elle même)
> FB version 2.5
Voici le code :
PS récupérée sur internet fonctionnement parait OK
Générateur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 SET TERM ^^ ; CREATE PROCEDURE ID2EAN13 ( PREFIX VARCHAR(2) ,ID INTEGER ) RETURNS ( BARCODE VARCHAR(13) )AS DECLARE VARIABLE N INTEGER; BEGIN BARCODE = PREFIX || LPAD(ID, 12 - CHAR_LENGTH(PREFIX), '0'); N = (CAST (SUBSTRING (BARCODE FROM 2 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 4 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 6 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 8 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 10 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 12 FOR 1) AS INTEGER) ) * 3+ CAST (SUBSTRING (BARCODE FROM 1 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 3 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 5 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 7 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 9 FOR 1) AS INTEGER)+ CAST (SUBSTRING (BARCODE FROM 11 FOR 1) AS INTEGER); N = MOD(N, 10); IF(N > 0)THEN N = 10 - N; BARCODE = BARCODE || CAST(N AS VARCHAR(20)); SUSPEND; END ^^ SET TERM ; ^^
Trigger (syntaxe incorrecte / non accepté)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE GENERATOR GENBARTESTEAN ; SET GENERATOR GENBARTESTEAN TO 0 ;
La création du trigger bloque sur le "EXECUTE" et j'imagine bien qu'il est possible de faire l'insertion telle que je la souhaite mais je ne vois pas comment...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SET TERM ^^ ; CREATE TRIGGER TRGBARTESTEAN for BARTEST ACTIVE BEFORE INSERT POSITION 0 AS BEGIN if (new.BARCODE is null) then new.BARCODE = EXECUTE PROCEDURE ID2EAN13( '33', gen_id(GENBARTESTEAN, 1)) ; END ^^ SET TERM ; ^^
Merci par avance de vos réponses
Question subsidiaire : comment mettre l'année (AA) à la place du préfixe ?
Partager