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

Autres SGBD Discussion :

Aide syntaxe sur les triggers


Sujet :

Autres SGBD

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 16
    Points : 14
    Points
    14
    Par défaut Aide syntaxe sur les triggers
    Bonjour,

    Je travaille sur les triggers et une question m'est venu. Je sais que devant new et old on doit mettre des : dans le bloc sql. Mais j'ai entendu du dire qu'on ne les mettais pas dans les requettes sql ou les if.
    pouvez-vous me confirmer la chose et aussi me dire si dans le trigger suivant j'aurais du mettre les : devant les new.
    Merci d'avance.

    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
    CREATE TRIGGER verif_vip
    AFTER INSERT OR UPDATE
    ON Activite
    FOR EACH ROW
     
    DECLARE
        somme_total Activite.tarifH%TYPE;
     
    BEGIN
     
     SELECT sum(duree*tarifH) INTO somme_total FROM participe, Activite
      WHERE participe.IdAct = Activite.IdAct AND new.IdCli = participe.Cli;
     
        IF somme_total > 1000 THEN 
               IF (new.IdCli NOT IN (SELECT IdCli FROM VIP)) THEN
                    INSERT INTO VIP VALUES (IdCli, sysdate):
               END IF;
     
        END IF;
     
    END;
    /

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par KuRuVI Voir le message
    Je travaille sur les triggers et une question m'est venu. Je sais que devant new et old on doit mettre des : dans le bloc sql.
    Mais j'ai entendu du dire qu'on ne les mettais pas dans les requettes sql ou les if.
    cela dépend beaucoup du SGBD, ce que vous n'avez pas indiqué


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     SELECT sum(duree*tarifH) INTO somme_total FROM participe, Activite
      WHERE participe.IdAct = Activite.IdAct AND new.IdCli = participe.Cli;
    utilisez plutôt une forme plus moderne (normalisée ?) pour la jointure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT sum(duree*tarifH) INTO somme_total FROM participe JOIN Activite  ON  participe.IdAct = Activite.IdAct
      WHERE participe.Cli = new.IdCli ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF somme_total > 1000 THEN 
               IF (new.IdCli NOT IN (SELECT IdCli FROM VIP)) THEN
                    INSERT INTO VIP VALUES (IdCli, sysdate):
               END IF;
    AMHA cela peut s'optimiser tout dépend si le NOT EXISTS est possible dans ce SGBD, en tout les cas le NOT IN c'est vraiment pas le top !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF (SOMME_TOTAL>1000) AND (NOT EXISTS SELECT 1 FROM VIP WHERE IDCLI=NEW.IDCLI ) THEN
       INSERT INTO VIP VALUES (IdCli, sysdate):
     END IF;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Merci pour votre réponse.
    Effectivement je pensais que la syntaxe des : était la même partout. Le SGBD que j'utilise est Oracle.

    De plus pouvez-vous m'expliquer pourquoi une forme normalisée est mieux ici?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF (SOMME_TOTAL>1000) AND (NOT EXISTS SELECT 1 FROM VIP WHERE IDCLI=NEW.IDCLI ) THEN
       INSERT INTO VIP VALUES (IdCli, sysdate):
     END IF;
    Que représente le 1 après le SELECT ?


    Merci encore pour votre réponse.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 045
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 045
    Points : 40 963
    Points
    40 963
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    pour répondre à la question sur la "normalisation" je dirais que c'est plus une question de modernisation et de lecture qu'autre chose.
    Cela permet de séparer les relations des conditions, et même si je présume que l'optimiseur d'oracle le fait de manière implicite c'est quand même mieux de l'écrire de manière explicite. Ici vous avez affaire à requête simple mais avec une dizaine de tables ?
    De même, je n'ai pas osé, ne connaissant pas le SGBD, utiliser des alias de table mais je le conseille vivement, toujours pour des questions de lecture "humaine" (je pense toujours à la maintenance)

    Pour le 1 , cela m'évite simplement de récupérer une colonne inutile la seule nécessité étant de savoir si la requête renvoi null ou non (ce que le EXISTS fait)


    pour les ":" , je n'utilise pas Oracle donc je ne saurais être affirmatif, pourquoi ne pas demander dans le forum Oracle ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2018
    Messages : 16
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Merci beaucoup pour votre réponse je comprends mieux.
    Oui, je vais voir sur le forum d'oracle.

    Je vous souhaite une bonne journée,

    Cordialement.

Discussions similaires

  1. [2012] Besoin d'aide sur les triggers
    Par layesanga dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/03/2013, 19h53
  2. Aide sur les triggers
    Par manuzed78 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 31/10/2012, 14h41
  3. aide sur les triggers en oracle
    Par tsague dans le forum Administration
    Réponses: 5
    Dernier message: 28/01/2008, 14h28
  4. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28

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