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 script sql


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
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut trigger script sql
    salut

    j'ai un exercice de declencheur quie je n'arrive pas a résoudre ,l'execice est le suivant :
    creer un declencheur sur la table inputs permettant de signaler l'existance d'un autre inputs portant le meme type et description en cas d'insertion.

    la table inputs elle est comme suit:
    inputs(type,description,interface,caption)

    merci davance

  2. #2
    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
    merci de donner un exemple, et de préciser quel est ton SGBD.

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    > j'ai une table "hardware"dans une base MYSQL qui comporte 4 champs (id, type, caption, description)

    > la clé primaire est le champs id. Je voudrais créer un Trigger qui conserve dans une table "ancienhardware" tous les types des hardwares supprimés de la table hardware. j'ai vu que l'on pouvait faire un trigger pour cela.

    > Voilà ce que j'ai mis mais qui ne fonctionne pas


    >Création de la table ancienhardware :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    create table ancienhardware
    (type varchar(50));
    >Création du trigger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create or replace trigger trigancienhardware
    after delete on hardware
    for each row
    insert into ancienhardware
    values (:old.type)

  4. #4
    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
    MySQL n'accepte pas le OR REPLACE sur un CREATE TRIGGER (ou alors seulement les versions très récentes).

    De plus, :old est une syntaxe propre à Oracle. En standard, comme sous MySQL, on écrit simplement old.

    ça donne donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TRIGGER trigancienhardware
    after DELETE ON hardware
    FOR each row
    INSERT INTO ancienhardware 
    values (old.type)

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    la strcture de la table"hardware" est(ID,type,caption,description)

    les valeurs de ma table "hardware" sont les suivants

    (1,'Keyboard','Atendu ','standard')
    (2,'Pointing','peripherique','interface')


    je suprime la deuxieme ligne

    le script du trigger est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE trigger trigancienhardware
    after delete on hardware
    for each row
    insert into ancienhardware
    values (old.type)
    apres l'execution de ce trigger la table ancienhardware doit contenir le type 'Pointing'

    mais pour mon cas elle me donne comme suit
    ancienhardware('Keyboard'
    'Pointing')

    cette table "ancienhardware" contient le type supprimé(Pointing) et l'autre type(Keyboard) et ce qui est faut

    AIDEZ MOI SVP C URGENT

  6. #6
    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
    Plutôt que de répéter "c'est urgent", il aurait été plus efficace de donner toutes les informations dès le début...

    Si ta table ancienhardware comporte plusieurs colonnes, il faut les nommer dans l'INSERT. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DROP TRIGGER trigancienhardware ;
     
    CREATE TRIGGER trigancienhardware
    after DELETE ON hardware
    FOR each row
    INSERT INTO ancienhardware (type)
    VALUES (old.type) ;

  7. #7
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut syntaxe du trigger
    salut,


    je travail avec MYSQL

    le script de mon trigger est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE trigger `trigancienhardware` 
    after delete on `inputs` 
    for each row 
    insert into ancienhardware (`ID`,`HARDWARE_ID`,`type`,`MANUFACTURER`) 
    values (old. `ID`,old.`HARDWARE_ID`,old.`type`,old.`MANUFACTURER`)
    ce trigger est executé avec succe

    apres l'excution du trgger j'ai realise une requete qui fait la comparaison entre deux table "ancienhardware" et "inputs"

    la structure de cette requete est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete ancienhardware 
    from ancienhardware inner join inputs using (`HARDWARE_ID`,`TYPE`)
    le but de mon travail est de mettre cette requette dans le syntaxe de trigger
    c a d le triger est declencher en cas de delete et au meme temps compare le deux tables "ancienhardware" et "inputs"

    je suppose que la solution est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE trigger `trigancienhardware` 
    after delete on `inputs` 
    for each row 
    insert into ancienhardware (`ID`,`HARDWARE_ID`,`type`,`MANUFACTURER`) 
    values (old. `ID`,old.`HARDWARE_ID`,old.`type`,old.`MANUFACTURER`) 
    BEGIN 
    delete ancienhardware from ancienhardware inner join inputs using (`HARDWARE_ID`,`TYPE`) 
    END; 
    $
    merci de votre aide

  8. #8
    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
    Tel quel, votre trigger va ajouter le hard supprimé à la table ancienhardware, et ensuite il va le supprimer. Il faudrait savoir ce que vous voulez ?

  9. #9
    Membre confirmé
    Inscrit en
    Novembre 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 208
    Par défaut
    je veux savoir seulement que ce code est correcte ecrit.c a d pas d'erreur de syntaxe.peut n'importe le resultat fournis de ce triggeur.

    je vous rappelle que je travail avec MYSQL et le code est le suivant :
    Code :

    CREATE TRIGGER `trigancienhardware`
    after DELETE ON `inputs`
    FOR each row
    INSERT INTO ancienhardware (`ID`,`HARDWARE_ID`,`type`,`MANUFACTURER`)
    VALUES (old. `ID`,old.`HARDWARE_ID`,old.`type`,old.`MANUFACTURER`)
    BEGIN
    DELETE ancienhardware FROM ancienhardware INNER JOIN inputs USING (`HARDWARE_ID`,`TYPE`)
    END;
    $

  10. #10
    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
    Le meilleur moyen de savoir si ton code est correct et ne comporte pas d'erreur, c'est de le tester.

    Il est heureux que tu ne te soucies pas du résultat, car il n'y en aura aucun

Discussions similaires

  1. Trigger et script sql
    Par daheda dans le forum Oracle
    Réponses: 4
    Dernier message: 06/05/2009, 17h14
  2. Réponses: 2
    Dernier message: 04/08/2008, 16h33
  3. pb script sql sur trigger (create or replace)
    Par sun19 dans le forum Développement
    Réponses: 3
    Dernier message: 29/11/2006, 13h02
  4. create user, affectation droits et scripts sql
    Par hirochirak dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/02/2004, 10h21
  5. script SQL : affectation de variables
    Par Laura dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/10/2003, 21h32

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