IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Erreur lors de la création d'un trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut Erreur lors de la création d'un trigger
    Bonjour à tous !
    Alors voila je travaille actuellement sur GLPI et OCS Inventory (pour ceux qui connaissent) basés sur une base MySQL.
    Et je voudrais créer un TRIGGER qui a chaque insertion dans une table vérifie le champ et le supprime s'il correspond.
    Pour le moment j'ai ca...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER suppr_printers BEFORE INSERT ON printers
    FOR EACH ROWS BEGIN
    IF (NEW.name like '%PDF%') THEN
      DELETE FROM printers WHERE name like '%PDF%';
    END IF;
    IF (NEW.name like '%Fax%') THEN
      DELETE FROM printers WHERE name like '%Fax%';
    END IF;
    END;
    Et MySQL me répond

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #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 '
    CREATE TRIGGER suppr_printers BEFORE INSERT ON printers
    FOR EACH ' at line 1
    Sur la page principale de PHPMyadmin voici la version du serveur...

    Version du serveur: 5.0.27-community-nt

    Donc normalement les Triggers sont possibles

  2. #2
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    A première vue, c'est FOR EACH ROW (sans S)

  3. #3
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    Toujours pareil...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Erreur
    requête SQL: 
     
    CREATE TRIGGER suppr_printers BEFORE INSERT ON printers
    FOR EACH
    ROW BEGIN IF( NEW.name LIKE '%PDF%' ) 
    THEN 
    DELETE FROM printers WHERE name LIKE '%PDF%';
     
     
     
    MySQL a répondu: 
     
    #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 'DELETE FROM printers WHERE name LIKE '%PDF%'' at line 4

  4. #4
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Première erreur :
    #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 '
    CREATE TRIGGER suppr_printers BEFORE INSERT ON printers
    FOR EACH ' at line 1'
    Deuxième erreur :
    #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 'DELETE FROM printers WHERE name LIKE '%PDF%'' at line 4
    C'est donc positif on avance

    Je ne sais pas si tu as donné la procédure complète mais il manque les fin de bloques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TRIGGER suppr_printers BEFORE INSERT ON printers
    FOR EACH ROW
    BEGIN
         IF( NEW.name LIKE '%PDF%' ) THEN 
              DELETE FROM printers WHERE name LIKE '%PDF%';
         END IF;
    END;

    Attention au DELIMITER il est souvent source de problèmes, quel client utilise utilise tu ?

  5. #5
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    J'utilise PHPMyAdmin si c'est ce que tu veux savoir...

  6. #6
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Dans ce cas tente ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TRIGGER suppr_printers BEFORE INSERT ON printers
    FOR EACH ROW
    BEGIN
         IF( NEW.name LIKE '%PDF%' ) THEN 
              DELETE FROM printers WHERE name LIKE '%PDF%';
         END IF;
    END;
    //
    Et dans la console qui te permet d'exécuter la requête spécifie le délimiteur // en bas de la popup.

  7. #7
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    requête executée avec succès donc je vous tiens au courant pour voir si ca fonctionne réellement.
    Merci

  8. #8
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    Maintenant quand j'essaye d'ajouter une imprimante dans ma table voici la réponse de MySQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MySQL a répondu: 
     
    #1442 - Can't update table 'glpi_printers' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

  9. #9
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Cette erreur proviens du fait que qu'un verrous est posé lors de l'exécution du trigger, il deviens alors impossible de toucher a cette table avant la fin de l'execution du trigger.

    Pourrait-tu nous expliquer a quoi va servir ce trigger afin de pouvoir tenter de te proposer une solution équivalent au DELETE

  10. #10
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    Je suis actuellement en stage (je fini vendredi midi) et je dois installé glpi et ocs inventory.
    je voudrais empeché toutes les imprimantes du type "PDFCreatpor" ou "Fax" ou "Microsoft XPS Document Writer" de s'afficher dans la base

    et donc je voulais faire un trigger pour vérifier à chaque insertion si oui ou non il faut l'insérer ou non ...

  11. #11
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    Mon stage se finissant plus tôt que prévu à savoir jeudi soir, et voulant finir mon sujet de stage je voudrais savoir si quelqu'un pouvait m'aider à résoudre mon problème...

    je ne vois vraiment pas ce qui cloche...
    je ne vois pas pourquoi le trigger bloque, y'a t'il une raison ?

    j'aimerai comprendre... aidez moi svp :-(

  12. #12
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    A vrai dire comme je disais, ton problème est un problème de verrous, et puisque la table est en mutation durant l'execution du trigger, c'est impossible d'agir sur cette-ci.

    La solution qui résolverais directement ton problème au niveau du SQL procédural est : les exception.

    La marche a suivre est la suivante :
    1/ déclarer une exception
    2/ si il faut annuler l'insertion alors réveiller l'exception
    3/ lui associer un code d'erreur qui sera récupérable coté applicatif.

    Je sais qu'avec Oracle c'est très facile mais j'avoue n'avoir jamais utilisé d'exception avec MySQL alors je ne saurais trop te conseiller de ce coté la, si ce n'est que de faire des recherche sur les exceptions avec le SQl procédural de MySQL.

    Quand un exception est levé, l'éxécution du bloc d'instruction est stopé.

  13. #13
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 12
    Par défaut
    Je vais essayer de regarder ca...
    je vais chercher comment faire...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur lors de la création trigger mysql
    Par risfox dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/09/2011, 11h42
  2. Erreur lors de la création d'un trigger
    Par dnboa dans le forum PL/SQL
    Réponses: 7
    Dernier message: 17/09/2008, 11h58
  3. Réponses: 4
    Dernier message: 23/05/2006, 17h04
  4. message d'erreur lors de la création de la base
    Par ber_jp dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 20/05/2004, 12h15
  5. message d'erreur lors de la création d'une base
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/04/2004, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo