Coucou, je ne parviens pas à terminer 1 trigger pour le n° de telephone qui doit faire appel à 1 procedure stockee pour le n° de telephone. Je travaille dans les tables que j'ai trouvées sur la base de données https://sqlpro.developpez.com/cours/...s/mpdHotel.gif qui vient en fait des publications de SQL PRO https://sqlpro.developpez.com/cours/bddexemple et j'utilise Wamp (Version de MySQL :
8.0.27) Merci à celles et ceux qui m'aideront <3

Voici mon objectif :
-créer un trigger qui vérifiera avant ajout, en faisant appel à une fonction/procédure stockée qui elle fera uniquement la vérification de l’existence de numéro de téléphone et de l’adresse e-mail un message d’erreur “l’e-mail et/ou le numéro de téléphone existe déjà”, si c’est le cas.
-Faire deux SQL de test exemple : ajouter un client avec ses informations complètes (Nom, Prénom, société, téléphone, localisation tel, e-mail, localisation e-mail)
Je vais d'abord réfléchir pour le numéro de téléphone pour ce post, ensuite je réfléchirai pour l'adresse mail dans un autre post. Donc pour ce post je parlerai de 1 trigger et 1 procedure concernant le numéro de telephone, et dans un autre post je parlerai de 1 trigger et 1 procedure concernant l'adresse mail car je ne vois pas comment faire autrement...

Je vous présente mon trigger :
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
 
//pout le numero de telephone
delimiter;
 
create TRIGGER trg_ajout_num before insert on T_CLIENT
 
FOR EACH ROW
 
	BEGIN
 
	insert into T_TELEPHONE (TEL_ID) values (new.TEL_ID);
 
	END;
 
delimiter ;|
Je vous présente ma procédure stockée :
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
 
CREATE EXCEPTION EXC_EXISTE_DEJA 'Le numéro de téléphone @1 existe déjà';
 
set term^;
CREATE PROCEDURE Procedure_Ajouter_Numero(
   numero integer)
 
   RETURNS
   (numeroTelephone integer)
 
 as
 BEGIN
  //vérifier si le numéro n existerait pas déjà
  if ((SELECT tel_ID from T_Telephone where Tel_ID=:numero)
      )THEN
       EXCEPTION EXC_EXISTE_DEJA USING (:numero);
 
  //recherche le numéro de tel si pas précisé
  if (numero is null)
  then
   select TEL_ID from T_TELEPHONE where TEL_ID=:numero 
   into :numeroTelephone;
 
  //insère la ligne de commande
  insert into T_TELEPHONE (TEL_ID)
  values(:numero )
  returning TEL_ID into :numeroTelephone;
 
 
 END^
 
/* comment je vais tester ensuite */
select * from T_TELEPHONE
EXECUTE PROCEDURE Procedure_Ajouter_Numero(0488448844,57,'test@email.com','localisation')

Je vous présente la manière dont j'ai créé les tables en question (avec les référencements) :
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
 
/* Table : T_CLIENT*/
create table T_CLIENT(
CLI_ID INTEGER primary key references T_TITRE,
TIT_CODE CHAR(8),
CLI_NOM CHAR(32) not null,
CLI_PRENOM VARCHAR(25),
CLI_ENSEIGNE VARCHAR(100)
);
/* Index*/
create unique index IDX_T_CLIENT_PK on T_CLIENT (CLI_ID);
create index IDX_L_CLI_TIT_FK on T_CLIENT (TIT_CODE);
 
/* Table : T_TELEPHONE*/
create table T_TELEPHONE (
TEL_ID INTEGER primary key,
CLI_ID INTEGER references T_CLIENT,
TYP_CODE CHAR(8) references T_TYPE,
TEL_NUMERO CHAR(20) not null,
TEL_LOCALISATION VARCHAR(64)
);
 
/* Index*/
create unique index IDX_T_TELEPHONE_PK on T_TELEPHONE (TEL_ID);
create index IDX_L_TEL_CLI_FK on T_TELEPHONE (CLI_ID);
create index IDX_L_TEL_TYP_FK on T_TELEPHONE (TYP_CODE);
 
/* Table : T_EMAIL */
create table T_EMAIL (
EML_ID INTEGER primary key references T_CLIENT,
CLI_ID INTEGER not null,
EML_ADRESSE VARCHAR(100) not null,
EML_LOCALISATION VARCHAR(64)
);
 
/* Index*/
create unique index IDX_T_EMAIL_PK on T_EMAIL (EML_ID);
create index IDX_L_EML_CLI_FK on T_EMAIL (CLI_ID);