[MYSQL] Trigger sur Ajout

Fermé
aliasing Messages postés 8 Date d'inscription mardi 19 juin 2007 Statut Membre Dernière intervention 11 juillet 2007 - 11 juil. 2007 à 11:23
 Le marocain - 18 juil. 2009 à 17:25
Bonjour à tous !

J'utilise MYSQL 5.0.37 et phpmyadmin 2.10.1.

Voila mon problème, je souhaite créer un TRIGGER, qui quand je rajouterais un nouveau patient, me signale par un message ou une erreur que ce patient est déjà présent dans ma base.
Pour se faire, j'ai une table PATIENT avec code_patient et nom.

Mon trigger :

DELIMITER $$
CREATE TRIGGER T_B_I_PATIENT BEFORE INSERT ON PATIENT
FOR EACH ROW
DECLARE v_nbpatient number;
BEGIN
SELECT COUNT(code_p) into v_nbpatient from PATIENT WHERE PATIENT.nom=:NEW.nom;
if (v_nbpatient>1) THEN
RAISE_APPLICATION_ERROR(-20002,'Patient déjà présent dans la base');
end if;
end$$

L'erreur qui m'est affiché :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$
CREATE TRIGGER T_B_I_PATIENT BEFORE INSERT ON PATIENT
FOR EACH ' at line 1


Merci de votre aide.
A voir également:

3 réponses

Bonjour,

moi aussi j'avais un problème pour les trigger sous Mysql mais j'ai réussi "hamdolilah" à réalisé deux exemples qui marche, bien à vous ts.

voilà un 1er exemple :


delimiter //
CREATE TRIGGER upd_check BEFORE UPDATE ON account
FOR EACH ROW
BEGIN
IF NEW.amount < 0 THEN
SET NEW.amount = 0;
ELSEIF NEW.amount > 100 THEN
SET NEW.amount = 100;
END IF;
END//
delimiter ;



2ème exemple :


drop trigger cont_depart_update;

DELIMITER //
CREATE TRIGGER cont_depart_update AFTER UPDATE ON tacheassigne
FOR EACH ROW
BEGIN
DECLARE idProjet varchar(20);
DECLARE moyenneAcompli varchar(5);
select p.idp into @idProjet
from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where ta.idta=New.idta;

select avg(ta.accompli) into @moyenneAcompli
from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where ta.idta in (select ta.idta from projet p inner join tache t on p.idp = t.idp inner join tacheassigne ta on t.idtache = ta.idtache where p.idp=@idProjet)
group by p.idp;
update projet set accompli=@moyenneAcompli where idp=@idProjet;
END//
delimiter;



/////////////////////////////////////////////////////////////////////////////////
RQ :
* en mysql c'est "NEW" c'est pas comme ORACLE ":NEW"
* utiliser les delimiter (existe aussi au niveau de la console de mysql)
* l'appel des varriables c'est avec "@" et non & comme ORACLE
/////////////////////////////////////////////////////////////////////////////////
2
Salut!

As tu trouvé la solution à ton pb?

J'ai exactement le même...

SVP. Merci d'avance.

Audrey
0
IL faut passer par le MySql Consol pour changer le "delimiter".
0