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 de syntaxe dans un trigger


Sujet :

SQL Procédural MySQL

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2018
    Messages : 1
    Par défaut Erreur de syntaxe dans un trigger
    Bonjour,
    Alors voilà j'ai une base de données qui gère les congés des employés d'une entreprise. Voici ci-dessous les requêtes que j'ai utilisé pour créer la base et toutes ses tables.
    L'idée que je veut implémenter est de restreindre l'insertion du matricule d'un employé dans la table des sorties en congé pour le type "Maternité" ayant son propre code qu'aux employés femmes. Du coup j'ai créé une colonne générée qui vérifie cette condition avec une autre table contenant uniquement les matricules des employés femmes.
    Le seul petit problème est que cela m'oblige à mettre à jour manuellement la table des femmes à chaque insertion dans la table des employés. J'ai donc pensé à créer un trigger pour le faire automatiquement.
    J'ai essayé d'en apprendre plus sur sa syntaxe et comment l'employer et il s'est avéré que ma requête était simple. Le seul hic est qu'on me dit que j'ai une erreur de syntaxe sans que je puisse savoir où ça se situe exactement, ni même de quoi s'agit-il ^^"
    Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TRIGGER MAJR BEFORE INSERT ON `gestion_des_conges`.`EMPLOYE` FOR EACH ROW
    IF(NEW.SEXE="F") THEN INSERT INTO `gestion_des_conges`.`FEMMES`(`MAT`) VALUES (NEW.MAT);
    Le code engendre l'erreur suivante à l'exécution :
    " #1064 - Erreur de syntaxe près de ' ' à la ligne 2"
    J'espère avoir une réponse rapidement ^^

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 887
    Par défaut
    Salut Tadashi.

    Voici le source :
    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
     
    -- ======================
    -- Base de Données `base`
    -- ======================
     
    DROP DATABASE IF EXISTS `base`;
     
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`;
     
    use `base`;
     
    -- =============
    -- Table `femme`
    -- =============
     
    DROP TABLE IF EXISTS `femme`;
     
    CREATE TABLE `femme`
    ( `id`         integer unsigned  NOT NULL auto_increment PRIMARY KEY,
      `matricule`  varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =================
    -- Vidage de `femme`
    -- =================
     
    select * from `femme`;
     
    -- ===============
    -- Table `employe`
    -- ===============
     
    DROP TABLE IF EXISTS `employe`;
     
    CREATE TABLE `employe`
    ( `id`         integer unsigned  NOT NULL auto_increment PRIMARY KEY,
      `matricule`  varchar(255)      NOT NULL,
      `sexe`       char(01)          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED;
     
    -- =====================
    -- Déclencheur `remplir`
    -- =====================
     
    DROP TRIGGER IF EXISTS `remplir`;
     
    DELIMITER $$
     
    CREATE TRIGGER `remplir`
    BEFORE INSERT ON `employe`
    FOR EACH ROW
    BEGIN
      if new.sexe = 'f' then
         insert into `femme` (`matricule`) value (new.matricule);
      end if;
    END$$
     
    DELIMITER ;
     
    -- ========================
    -- Insertion dans `employe`
    -- ========================
     
    insert into `employe` (`matricule`,`sexe`) values
      ('12345', 'f'),('54321','m'),('15243','f'),('34251','m');
     
    -- ===================
    -- Vidage de `employe`
    -- ===================
     
    select * from `employe`;
     
    -- =================
    -- Vidage de `femme`
    -- =================
     
    select * from `femme`;
     
    -- ===
    -- Fin
    -- ===
     
    COMMIT;
    SET AUTOCOMMIT = 1;
    exit
    Et son exécution :
    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `femme`
    --------------
     
    --------------
    CREATE TABLE `femme`
    ( `id`         integer unsigned  NOT NULL auto_increment PRIMARY KEY,
      `matricule`  varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    select * from `femme`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `employe`
    --------------
     
    --------------
    CREATE TABLE `employe`
    ( `id`         integer unsigned  NOT NULL auto_increment PRIMARY KEY,
      `matricule`  varchar(255)      NOT NULL,
      `sexe`       char(01)          NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP TRIGGER IF EXISTS `remplir`
    --------------
     
    --------------
    CREATE TRIGGER `remplir`
    BEFORE INSERT ON `employe`
    FOR EACH ROW
    BEGIN
      if new.sexe = 'f' then
         insert into `femme` (`matricule`) value (new.matricule);
      end if;
    END
    --------------
     
    --------------
    insert into `employe` (`matricule`,`sexe`) values
      ('12345', 'f'),('54321','m'),('15243','f'),('34251','m')
    --------------
     
    --------------
    select * from `employe`
    --------------
     
    +----+-----------+------+
    | id | matricule | sexe |
    +----+-----------+------+
    |  1 | 12345     | f    |
    |  2 | 54321     | m    |
    |  3 | 15243     | f    |
    |  4 | 34251     | m    |
    +----+-----------+------+
    --------------
    select * from `femme`
    --------------
     
    +----+-----------+
    | id | matricule |
    +----+-----------+
    |  1 | 12345     |
    |  2 | 15243     |
    +----+-----------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
    Appuyez sur une touche pour continuer...
    @+

Discussions similaires

  1. Erreur de syntaxe dans un trigger
    Par bastiii dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 10/09/2008, 08h47
  2. Erreur de syntaxe dans INSERT INTO VALUES
    Par Mariboo dans le forum Access
    Réponses: 4
    Dernier message: 25/05/2006, 18h57
  3. erreur de syntaxe dans l'instructiuon insert into
    Par greg64 dans le forum Access
    Réponses: 6
    Dernier message: 13/04/2006, 14h07
  4. Erreur de syntaxe dans une requete
    Par linou dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/08/2005, 12h44
  5. [JSP]Erreur de syntaxe dans un tag <option select
    Par logica dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 03/05/2005, 14h33

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