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

Oracle Discussion :

Aide sur la création d un Trigger


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut Aide sur la création d un Trigger
    Bonjour,

    j'aurai besoin d'aide concernant la creation d un trigger sur lequel je bloque.
    Sur une table, je dois verifier si un champ est supérieur à 1 (update) et à ce moment, je modifie la valeur d un autre champ de la meme table.

    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Bonjour,

    Vous pouvez toujours commencer par lire ceci:
    http://sheikyerbouti.developpez.com/pl_sql/?page=Chap6
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    Merci,

    j ai pu réaliser ceci :
    BEGIN
    if :NEW.TBLPAG > 1
    update usr0001 set usr0001.AVECREP = 'O' where usr0001.TBLLIA = :OLD.TBLLIA
    END;



    Mais ca ne compile pas.

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    1. veuillez poster le code complet du trigger.
    2. si message il y a, merci de le communiquer.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    je l ai modifié :

    CREATE TRIGGER INCREASE
    AFTER UPDATE ON USR0001
    FOR EACH ROW
    WHEN (new.TBLPAG > 1)
    BEGIN
    UPDATE USR0001 SET AVECREP='O'
    END;

    il ne passe pas à la compilation et il n y a aucune erreur. j utilise Oracle 8.1.7.

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    NEW et OLD doivent être précédés de : (:NEW :OLD)

    Pas besoin d'update pour mettre à jour une colonne de l'enregistrement en cours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Begin
      :NEW.AVECREP := 'O' ;
    End;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    j ai remplacé par celui ci :
    CREATE TRIGGER INCREASE
    AFTER UPDATE ON USR0001
    FOR EACH ROW
    WHEN (:NEW.TBLPAG > 1)
    BEGIN
    :NEW.AVECREP := 'O'
    END
    ;

    j ai le message d erreur suivant :
    WHEN (:NEW.TBLPAG > 1)
    *
    ERREUR la ligne 4 :
    ORA-00920: Oprateur relationnel non valide

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Votre clause WHEN est incomplète
    http://download-west.oracle.com/docs...htm#SQLRF01405
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  9. #9
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Il me semble qu'il ne faille pas mettre :new dans la clause when, mais bien new (sans les : ) comme cela était initialement fait.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    j ai supprimé les :, il crée bien le trigger mais avec des erreurs de compilation.

  11. #11
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Affichez l'erreur avec show_error

    de plus, il manque le ; à la fin de l'instruction :NEW.AVECREP := 'O'
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Bonjour,

    D'abord, nous ne traitons pas des problèmatique de débugging et te laissons donc l'initiative de corriger tes erreurs.

    Par ailleurs, merci d'utiliser les balises CODE comme indiqué dans les régles du forum

    Enfin, une lecture plus attentive de la doc devrait te suffire à te corriger seul et ainsi avoir le plaisir d'être autonome

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    CREATE OR REPLACE TRIGGER INCREASE
    AFTER UPDATE ON USR0001
    FOR EACH ROW
    WHEN (NEW.TBLPAG > 1)
    BEGIN
    UPDATE USR0001 SET AVECREP = 'N';
    END;

    Voici mon nouveau code, mais j ai une erreur de table mutante. Comment contourner ce pb ?

  14. #14
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Voila qui serait mieux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER INCREASE
      AFTER UPDATE ON USR0001
       FOR EACH ROW
       WHEN (NEW.TBLPAG > 1)
       BEGIN
    :NEW.AVECREP := 'N';
     END;

  15. #15
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par hatoug@voila.fr
    BEGIN
    UPDATE USR0001 SET AVECREP = 'N';
    END;
    Vous ne lisez donc pas les réponse que l'on vous fourni ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    si, mais ca ne marche pas.
    lorsque je crée ce trigger, j ai le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE TRIGGER INCREASE
      AFTER UPDATE ON USR0001
       FOR EACH ROW
       WHEN (NEW.TBLPAG > 1)
       BEGIN
    :NEW.AVECREP := 'N';
     END;
    ORA-04084: impossible de changer les valeurs NEW pour ce type de dclencheur
    c est pour cela que j ai remplace par le update, qui pose un probleme de table mutante.

  17. #17
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    et pourquoi fais-tu un trigger after update et non before update ?
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 34
    Points : 19
    Points
    19
    Par défaut
    que je fasse un before ou un after, j ai le meme probleme

  19. #19
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    http://ora-04084.ora-code.com/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE TRIGGER INCREASE
      BEFORE UPDATE ON USR0001
       FOR EACH ROW
       WHEN (NEW.TBLPAG > 1)
       BEGIN
    :NEW.AVECREP := 'N';
     END;

  20. #20
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par hatoug@voila.fr
    que je fasse un before ou un after, j ai le meme probleme
    Là je suis sceptique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> CREATE OR REPLACE TRIGGER INCREASE
      2    BEFORE UPDATE ON USR0001
      3     FOR EACH ROW
      4     WHEN (NEW.TBLPAG > 1)
      5     BEGIN
      6  :NEW.AVECREP := 'N';
      7   END;
      8  /
    Trigger created.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Aide sur la création d'une bdd sous MySQL
    Par Shellai-93 dans le forum Débuter
    Réponses: 20
    Dernier message: 18/08/2006, 11h15
  2. Besoin d'aide sur une requete ds un trigger
    Par ideal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/02/2006, 10h05
  3. Aide sur la création d'un type simple (nom composite)
    Par testeur dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 06/11/2004, 20h30
  4. [Oracle] Aide pour la création d'un trigger
    Par Sonic dans le forum Administration
    Réponses: 14
    Dernier message: 04/11/2004, 19h54

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