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 :
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...-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 vous présente mon trigger :
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 //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 ;|
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);
Partager