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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 expérimenté
    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
    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
    Membre confirmé
    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
    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 expérimenté
    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
    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
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    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
    Membre confirmé
    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
    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
    Membre confirmé
    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
    Par défaut
    -->Waldar :

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

+ 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