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 :

Probléme Trigger sur Mysql 5


Sujet :

SQL Procédural MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Points : 17
    Points
    17
    Par défaut Probléme Trigger sur Mysql 5
    Bonjour à toutes et à tous,
    je suis en train de créer un trigger sur MySql 5. Le but Effectuer un test sur la ligne à inséerer. Si le différence entre @send et @lastoken est < 300, de faire un update sur la ligne à insérer.
    J'obtiens comme erreur : #1415 - Not allowed to return a result set from a trigger
    Et voici le code
    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
     
    DELIMITER $$
    CREATE TRIGGER addToken BEFORE INSERT ON sessionend
    FOR EACH
    ROW BEGIN DECLARE send INT;
     
    DECLARE lastoken INT;
     
    IF( NEW.token != "" ) THEN SET send =0;
     
    SET lastoken =0;
     
    SELECT @send = timestamp
    FROM sessionend
    WHERE token = 'sessionEnded';
     
    SELECT @lastoken = timestamp
    FROM sessionend
    ORDER BY timestamp DESC
    LIMIT 1 ;
     
    IF( (
    @send - @lastoken
    ) <300 ) THEN UPDATE sessionend SET NEW.token = 'continue' WHERE token = 'sessionEnded';
     
    END IF ;
     
    END IF ;
     
    END $$

  2. #2
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Au premier coup d'oeil je ne vois pas mais je pense que c'est un problème d'interprétation des deux SELECT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT @lastoken = timestamp
    FROM sessionend
    ORDER BY timestamp DESC
    LIMIT 1 ;
    Tente ceci à la place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SET lastoken  =(SELECT timestamp 
    FROM sessionend 
    ORDER BY timestamp DESC LIMIT 1);
    Idem pour l'autre requête.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    En fait tu as raison le probléme venait du fait que les triggers dans Mysql n'accepte pas (ou du moins je crois, en tout cas difficile) l'affectation d'un variable dans le SELECT comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT @lastoken = timestamp
    FROM sessionend
    ORDER BY timestamp DESC
    LIMIT 1 ;
    Mais plutot de cette maniére
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT timestamp
    FROM sessionend
    ORDER BY timestamp DESC
    LIMIT 1 into lastoken;
    en tout cas ça marche. Merci encore de tes conseils.

  4. #4
    Expert confirmé

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

    Informations professionnelles :
    Activité : SDE

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

    Attention cette notation n'est pas normalisé et le INTO doit se trouver juste après le SELECT de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT timestamp
    INTO lastoken
    FROM sessionend
    ORDER BY timestamp DESC
    LIMIT 1;
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  5. #5
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Exacte, j'ai confondu avec la syntaxe de SQLServer.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 130
    Points : 146
    Points
    146
    Par défaut
    bonjour,

    je fais un appel d'une procédure stockée dans un trigger de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER fr AFTER UPDATE on matable
    FOR EACH ROW
    BEGIN
    call proc();
    END
    et j'ai la même erreur (1415) alors que la syntaxe de ma procédure respecte bien celle donnée par kazou...

    merci pour tous vos conseils

  7. #7
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    Il me semble qu'il soit pas possible d'appeler une procédure. Pour cela il faut faire une procédure avec rien dedans.
    Si ça marche, alors c'est qu'il y a une chose qui ne va pas dans la procédure.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 130
    Points : 146
    Points
    146
    Par défaut
    en faisant des recherches sur le net il m'a semblé possible de le faire, sans certitude, mais apparemment certains auraient réussi...

    et sinon je ne vois pas trop l'intérêt de faire une procédure vide

    je vais essayer de faire autrement pour m'en passer

  9. #9
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 037
    Points
    6 037
    Par défaut
    En faite, si c'est possible parce que moi même je le faisais pour loger (INSERT) les données. Pour cela j'appelais une procédure dans un trigger. Maintenant, il est fort possible que la procédure bug.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

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

Discussions similaires

  1. Problème trigger sur plusieurs tables
    Par thomasaurelien dans le forum PL/SQL
    Réponses: 5
    Dernier message: 24/01/2012, 19h26
  2. problème Trigger sur table unique
    Par speedev dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 21/01/2009, 12h09
  3. Problème trigger sur ajout
    Par envie2noichi dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 12/07/2007, 13h35
  4. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53
  5. Problèmes avec INTERSECT sur MYSQL
    Par zarbydigital dans le forum Requêtes
    Réponses: 1
    Dernier message: 27/09/2005, 13h18

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