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

PL/SQL Oracle Discussion :

Création de trigger


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 33
    Points
    33
    Par défaut Création de trigger
    Bonjour,


    J'ai une problématique concernant un trigger que je crée sous Oracle mais qui ne marche pas, je n'arrive pas à le résoudre.

    J'essaye de créer un trigger qui sert à comparer la date système à la date_fin d'un champ d'une table et si la date est inférieure à la date système on attribue le statut_derogation à ' valide' sinon à ' echue'.

    Le trigger est le suivant :
    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
    CREATE OR REPLACE TRIGGER COM_INVEST.T_STATUT_DEROGATION
    AFTER INSERT
    ON COM_INVEST.DEROGATION 
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    Begin
    select (date_fin, statut_derogation) from derogation ;
     
    if sysdate> date_fin then
     
    statut_derogation := ' valide'; 
     
    else if DATE_FIN > sysdate then 
     
    statut_derogation :=' echue'; 
    end if ;
     
    end if;
     
    END T_statut_derogation;
    Merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Points : 339
    Points
    339
    Par défaut
    Bonjour,

    Il faut faire un trigger BEFORE INSERT (vu qu'on change les valeurs avant l'insertion), et préfixer les colonnes par :NEW (puisque les colonnes qu'on teste ou qu'on modifie sont celles de la ligne nouvellement insérée)

    Essayez ceci :
    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
    CREATE OR REPLACE TRIGGER COM_INVEST.T_STATUT_DEROGATION
    BEFORE INSERT
    ON COM_INVEST.DEROGATION 
    REFERENCING NEW AS NEW OLD AS OLD
    FOR EACH ROW
    Begin
      if sysdate> :NEW.date_fin then
        :NEW.statut_derogation := ' valide'; 
      else 
         if :NEW.DATE_FIN > sysdate then  
            :NEW.statut_derogation :=' echue'; 
         end if ;
      end if;
     
    END T_statut_derogation;

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    merci pour votre retour,

    donc une fois j'ajoute une nouvelle derogation , quand je renseigne les different champs y compris date debut , date fin , lui il va effectuer un controle et renseigner automatiquement le statut_derogation par ' valide ' ou 'echue '
    n'est ce pas ?

    Merci bcp

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2012
    Messages : 127
    Points : 339
    Points
    339
    Par défaut
    C'est cela même.

    :NEW désigne la ligne nouvellement insérée. Dans le code que j'ai fourni, le trigger teste la valeur de :NEW.date_fin et met à jour :NEW.statut_derogation en conséquence. Après quoi, comme c'est un trigger BEFORE INSERT, le processus d'insertion reprend son cours et insère la ligne :NEW ainsi modifiée dans la table derogation.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Il ne faut pas faire de trigger dans ce cas.
    On ne pas stocke pas une information qui dépend du temps présent, on utilise une vue qui elle sera toujours juste.

    Si vous voulez que votre trigger soit juste, vous devez le rafraîchir chaque seconde pour toutes les lignes dont date_fin < sysdate.

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    d'accord ,

    j'essaye de tester le trigger en ajoutant les champs de la table derogation sans renseigner le champ ' Statut_derogation ' vu qu'il sera renseigner automatiquement aprés vérification de la date ,
    mais lors de lajout il me demande de le renseigner

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    -->Waldar :

    Pour le principe de vue que vous propesiez , vous pouvez expliquer un peu plus .. c'est pas assez clair :/

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE OR REPLACE VIEW COM_INVEST.V_DEROGATION
    AS
    SELECT <vos_colonnes_sauf_statut_derogation>
         , case when date_fin < sysdate then ' valide' else ' echue' end as statut_derogation
      FROM COM_INVEST.T_DEROGATION;

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    MErci beaucoup ,

    j'ai crée ma vue en suivant vos instructions mais il me sort l'erreur suivante ,
    parenthese de droite abscente !!

    :/

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est une erreur de syntaxe, et si vous ne mettez pas la syntaxe que vous avez envoyé ça va être difficile de vous aider.

  11. #11
    Nouveau membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2013
    Messages : 33
    Points : 33
    Points
    33
    Par défaut
    merci ça marche

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

Discussions similaires

  1. Création de triggers sous PHPMyAdmin
    Par MakorDal dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 25/02/2007, 18h50
  2. [MySQL] Création de trigger depuis PHP
    Par Shiva dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/01/2007, 13h16
  3. [Débutant] Création de trigger
    Par steph_batman dans le forum Développement
    Réponses: 4
    Dernier message: 06/12/2006, 16h44
  4. [PL/SQL] [9i] Pblm lors de la création de triggers
    Par ftrifiro dans le forum Oracle
    Réponses: 3
    Dernier message: 27/06/2006, 15h08
  5. [IB][IBQUERY][D7 pro] Création de Triggers à la volée.
    Par N1bus dans le forum Bases de données
    Réponses: 6
    Dernier message: 13/10/2004, 14h23

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