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 :

trigger syntaxe cursor


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Par défaut Utilisation de cursor dans un trigger
    Bonjour,

    je me relance dans les trigger mais j'ai une erreur de syntaxe dans phpmyadmin.
    J'ai une table lang et une table tag, quand j'insère un nouveau tag je voudrai que ca insère dans une troisième table le tag associé à toutes les langues.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    CREATE TRIGGER tag_managment AFTER INSERT ON capliste.tag 
    FOR EACH ROW
    BEGIN
    	DECLARE C_LANG CURSOR for 
    		select idlang from capliste.lang;
    	open C_LANG
    	For Cur IN C_LANG Loop
    		INSERT INTO langtag (idlang,idtag) VALUES(Cur,new.idtag)
    	End loop ;   
    END
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    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 'for 
            select idlang from capliste.lang' at line 4

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Par défaut
    Et inversement, quand j'insère une nouvelle langue je voudrai que ça m'associe tous les tags existant pour cette langue.

    Y'a t-il un autre moyen que les curseurs pour faire ça?
    Merci

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Je dirais que oui... Il suffit de faire un INSERT... SELECT sur la table des langues avec le nouveau tag :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO langtag (idlang, idtag)
    SELECT idlang, new.idtag
    FROM capliste.lang
    Pas besoin de passer par un curseur pour ça .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Par défaut
    Merci,

    avec phpmyadmin ça me met une erreur de syntaxe à 'INSERT...'

    Je suis passé par php pour l'exécuter et la j'ai eu une erreur droit insuffisant :/

    Je l'ai donc testé en local (sous wamp) avec la console

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    mysql> CREATE TRIGGER tag_managment AFTER INSERT ON capliste.tag
        -> FOR EACH ROW
        -> BEGIN
        ->  INSERT INTO capliste.langtag (idlang, idtag)
        ->  SELECT capliste.idlang, new.idtag
        ->  FROM capliste.lang
        -> END;
    ERROR 1064 (42000): 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 '' at
    line 7
    L'erreur est vraiment pas parlante^^

    Script de la base :
    Code sql : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    -- phpMyAdmin SQL Dump
    -- version 3.1.3
    -- http://www.phpmyadmin.net
    --
    -- Serveur: localhost
    -- Généré le : Ven 17 Avril 2009 à 15:37
    -- Version du serveur: 5.1.32
    -- Version de PHP: 5.2.9
     
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
     
    --
    -- Base de données: `capliste`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `lang`
    --
     
    CREATE TABLE IF NOT EXISTS `lang` (
      `idlang` varchar(4) NOT NULL,
      `nom` varchar(50) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `lang`
    --
     
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `langtag`
    --
     
    CREATE TABLE IF NOT EXISTS `langtag` (
      `idlang` varchar(10) NOT NULL,
      `idtag` varchar(20) NOT NULL,
      `nom` varchar(20) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `langtag`
    --
     
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `tag`
    --
     
    CREATE TABLE IF NOT EXISTS `tag` (
      `idtag` varchar(20) NOT NULL,
      `nom` varchar(20) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `tag`
    --

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Manque le ; à la fin du INSERT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mysql> CREATE TRIGGER tag_managment AFTER INSERT ON capliste.tag
        -> FOR EACH ROW
        -> BEGIN
        ->  INSERT INTO capliste.langtag (idlang, idtag)
        ->  SELECT capliste.idlang, new.idtag
        ->  FROM capliste.lang ;
        -> END;
    Par ailleurs, BEGIN et END ne servent à rien si tu n'as qu'une seule requête à mettre à l'intérieur.

  6. #6
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Par défaut
    J'ai supprimé le Begin et le End et aussi le nom de ma base de données, ça posé problème...

    Merci

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

Discussions similaires

  1. trigger syntaxe mysql
    Par bigbo26 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 20/09/2012, 14h33
  2. Trigger Syntaxe Erreur
    Par hajarussa dans le forum Langage SQL
    Réponses: 3
    Dernier message: 22/07/2009, 14h43
  3. Trigger syntaxe sur MySQL
    Par Sekigawa dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 12/06/2008, 11h39
  4. Syntaxe pour un TRIGGER
    Par Loki13 dans le forum Développement
    Réponses: 3
    Dernier message: 11/05/2006, 15h59
  5. [Syntaxe Oracle/Sybase] désactiver un trigger
    Par MashiMaro dans le forum Sybase
    Réponses: 3
    Dernier message: 30/10/2003, 11h17

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