Partage
  • Partager sur Facebook
  • Partager sur Twitter

erreur trigger mysql

    16 février 2011 à 14:43:12

    bonjour,

    j'ai un souci avec un trigger sous mysql


    delimiter //
    
    CREATE TRIGGER `blacklist`
    BEFORE insert
    ON `message`
    FOR EACH ROW
    begin
    	declare nbRes INTEGER;
    	DECLARE estBlackliste CONDITION FOR 99001;
    	DECLARE EXIT HANDLER FOR estBlackliste SET @error = 'fail'; 
    	select count(*) into nbRes from `blacklist` where IDUSER2=new.idu AND IDU=new.destinatairem;
    	if nbRes=1 then
    		SIGNAL estBlackliste;
    	end if;
    end;
    //
    
    delimiter ;
    


    je prends l'erreur suivante:
    #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 'estBlackliste; end if; end' at line 11


    pourriez-vous m'aider??
    • Partager sur Facebook
    • Partager sur Twitter
      18 février 2011 à 19:59:52

      il faut enlever le "into nbres" à la ligne 11.

      Tu ne peux pas faire :

      SELECT COUNT(*) INTO quelquechose FROM quelquechose WHERE...

      mais seulement :

      SELECT COUNT(*) FROM quelquechose WHERE...

      Bonne
      • Partager sur Facebook
      • Partager sur Twitter
        19 février 2011 à 9:57:36

        Ne dites pas :

        select count(*) into nbRes from blabla
        


        Mais dites :

        select into nbRes count(*) from blabla
        


        Ou, plus élégant :


        PERFORM 1 FROM blacklist WHERE IDUSER2=new.idu AND IDU=new.destinatairem;
        	IF FOUND THEN ...
        

        • Partager sur Facebook
        • Partager sur Twitter
          23 février 2011 à 10:08:20

          ok j'ai donc essayé sous la forme suivante:

          delimiter //
          
          CREATE TRIGGER `testblacklist`
          BEFORE insert
          ON `message`
          FOR EACH ROW
          begin
          	declare nbRes INTEGER;
          	DECLARE estBlackliste CONDITION FOR 99001;
          	DECLARE EXIT HANDLER FOR estBlackliste set @error='fail!'; 
          	select into nbRes count(*)  from blacklist , new  where blacklist.IDUSER2=new.IDU AND blacklist.IDU=new.DESTINATAIREM;
          	if nbRes=1 then
          		SIGNAL estBlackliste;
          	end if;
          end;//
          
          delimiter ;
          


          mais ça ne marche pas plus, j'ai l'erreur suivante:
          #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 'estBlackliste; end if; end' at line 11
          • Partager sur Facebook
          • Partager sur Twitter
            25 février 2011 à 11:02:18

            Tu as MySQL 5.5 pour avoir le mot clé SIGNAL ?
            • Partager sur Facebook
            • Partager sur Twitter
              25 février 2011 à 13:48:27

              Hé bien il me semble bien que le mot clé SIGNAL n'est disponible qu'à partir de la version 5.5, mais je ne suis pas 100% sûr. Ça pourrait expliquer ta prise de boule !
              • Partager sur Facebook
              • Partager sur Twitter
                25 février 2011 à 14:35:14

                si c'est le cas j'ai une autre option que faire la MAJ?
                • Partager sur Facebook
                • Partager sur Twitter
                  25 février 2011 à 17:39:11

                  Non, justement, un des gros problèmes de mysql (rendant les triggers ridicules) était que tu ne pouvais pas balancer d'erreur dans un trigger... apparemment c'est fix en 5.5...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 mars 2011 à 18:20:22

                    d'accord merci je vais essayer comme ça :)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    erreur trigger mysql

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown