Bonjour,

Je suis en train d'appliquer cet excellent tutorial concernant l'héritage en BDD, et j'aimerais avoir la version MySql de ce trigger, écrit en Transact SQL de SQL Server:

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
36
37
38
39
40
41
42
43
44
/*  Trigger sur T_CAMION_CMN pour contrôler l'insertion  */
CREATE TRIGGER TRG_INS_T_CAMION
       ON T_CAMION_CMN
       FOR INSERT, UPDATE
AS
BEGIN
   DECLARE
      @errno    INTEGER,
      @errmsg   VARCHAR(255)
 
/*  La clef de "T_VEHICULE_VHC" doit exister pour la création de "T_CAMION_CMN"  */
   IF NOT EXISTS(SELECT *
                 FROM   T_VEHICULE_VHC T
                        INNER JOIN INSERTED I
                              ON T.VHC_ID = I.VHC_ID)
   BEGIN
      SET @errno  = 30002
      SET @errmsg = 'Clef de "T_VEHICULE_VHC" inconnu. Insertion dans "T_CAMION_CMN" impossible.'
      GOTO LBL_ERROR
   END
 
/* l'identifiant de camion ne doit pas être utilisé par les autres tables filles */
   IF EXISTS (SELECT *
              FROM   (SELECT VHC_ID
                      FROM T_MOTO_MTO
                      UNION ALL
                      SELECT VHC_ID
                      FROM T_VOITURE_VTR) T
              WHERE VHC_ID IN (SELECT VHC_ID
                               FROM   INSERTED))
   BEGIN
      SET @errno  = 30002
      SET @errmsg = 'Clef de "T_VEHICULE_VHC" déjà utilisée par ailleur. Insertion dans "T_CAMION_CMN" impossible.'
      GOTO LBL_ERROR
   END
 
   RETURN
 
/*  Gestion d'erreurs  */
LBL_ERROR:
    RAISERROR @errno @errmsg
    ROLLBACK TRANSACTION
END
GO
Je ne suis pas sûr que MySql supporte toutes ces fonctions, notamment d'erreurs, donc je suis preneur de toute "traduction" en MySql, même simplifié.

Merci!