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 :

Syntaxe Trigger before update


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Syntaxe Trigger before update
    Bonjour,
    Je souhaite crée dans base Oracle le trigger suivant:
    (équivalent à un update en cascade en fait...)

    create or replace trigger UPD_GLOSS_PAYS
    before update of GLOSS_NO on GLOSSARY
    referencing
    OLD as ligneAvant
    NEW as ligneAprès
    for each row
    when (GLOSSARY.TYPE_NO = 'CP')
    begin
    update CONTRAT_TX
    set PAYS = :ligneAvant.GLOSS_NO
    where PAYS = :ligneAprès.GLOSS_NO ;
    end;

    j'obtiens le message erreur suivant:
    ORA-04076: spécification NEW ou OLD erronée

    Quelqu'un pourrait m'aider ???
    Merci par avance

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut


    Pourquoi s'embetter à renommer old et new ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace trigger UPD_GLOSS_PAYS
    before update of GLOSS_NO on GLOSSARY 
    for each row
    when (GLOSSARY.TYPE_NO = 'CP') 
    begin
    update CONTRAT_TX 
    set PAYS = :old.GLOSS_NO
    where PAYS = :new.GLOSS_NO ;
    end;

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Bon, j'ai lutté pour trouver pourquoi l'erreur apparait : Vive mes cours !
    Attention : La condition de la clause WHEN peut contenir les colonnes préfixées par old et new
    J'ai fait un test, ça plante en fait à cause de la clause WHEN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create or replace trigger UPD_GLOSS_PAYS
    before update of GLOSS_NO on GLOSSARY 
    referencing 
    OLD as ligneAvant
    NEW as ligneAprès
    for each row
    when (ligneAvant.TYPE_NO = 'CP') 
    begin
    update CONTRAT_TX 
    set PAYS = :ligneAvant.GLOSS_NO
    where PAYS = :ligneAprès.GLOSS_NO ;
    end;

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Citation Envoyé par McM Voir le message
    Bon, j'ai lutté pour trouver pourquoi l'erreur apparait : Vive mes cours !

    J'ai fait un test, ça plante en fait à cause de la clause WHEN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create or replace trigger UPD_GLOSS_PAYS
    before update of GLOSS_NO on GLOSSARY 
    referencing 
    OLD as ligneAvant
    NEW as ligneAprès
    for each row
    when (ligneAvant.TYPE_NO = 'CP') 
    begin
    update CONTRAT_TX 
    set PAYS = :ligneAvant.GLOSS_NO
    where PAYS = :ligneAprès.GLOSS_NO ;
    end;
    doit manquer un ":" devant ligneavant

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par devyan Voir le message
    doit manquer un ":" devant ligneavant
    Pas si sûr
    WHEN Clause
    Specify the trigger restriction, which is a SQL condition that must be satisfied for Oracle to fire the trigger. See the syntax description of condition in Chapter 5, "Conditions". This condition must contain correlation names and cannot contain a query.

    The NEW and OLD keywords, when specified in the WHEN clause, are not considered bind variables, so are not preceded by a colon . However, you must precede NEW and OLD with a colon in all references other than the WHEN clause.


  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    C'est même certain que NON.
    pas de :new.colonne, mais new.colonne dans la clause WHEN.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Alors peut être que le pb provient de l'accent dans l'alias ligneAprès

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Tu sais, tu as repris un post d'octobre 2007....

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Points : 1 418
    Points
    1 418
    Par défaut
    Non, je n'avais pas vu...

    Simplement vu qu'il n'était pas clos (résolu)

Discussions similaires

  1. [MySql5.5] Trigger before update Oo
    Par Xploit dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 08/09/2011, 15h41
  2. Trigger before update erreur ORA-04091
    Par cyril dans le forum PL/SQL
    Réponses: 2
    Dernier message: 17/09/2010, 11h35
  3. Trigger Before Update
    Par sat83 dans le forum Débuter
    Réponses: 1
    Dernier message: 14/04/2009, 10h52
  4. Trigger before update
    Par Virtuosity dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/05/2008, 10h26
  5. Problème trigger BEFORE UPDATE
    Par berceker united dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 30/08/2006, 16h55

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