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

Toad Oracle Discussion :

Execution d'un Trigger


Sujet :

Toad Oracle

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 122
    Points : 47
    Points
    47
    Par défaut Execution d'un Trigger
    Bonjour amis!

    je viens de créer le trigger TRG_CONSO à partir de la syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE OR REPLACE trg_conso BEFORE INSERT ON dwh_conso_str
    REFERENCING NEW AS N 
    FOR EACH ROW
    BEGIN
          IF (N.ND IN (SELECT ND FROM dwh_conso_str)) THEN
          ABORT TRANSACTION
    END
    .

    Par la suite j'ai voulu l'executer en effectuant une insertion dans la table dwh_conso_str. Voici le script d'insertion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO dwh_conso_str VALUES ('24494761','12','15','01/08/2008','2','31/07/2008')
    Lorsque je lance la requete, l'erreur suivante apparait:
    << ORA-04098 trigger DWHDEV.TRG_CONSO is invalid and failed revalidation>>. je ne comprends pas pourquoi le trigger refuse de s'executer. Pouvez vous m'aidez à executer un trigger sous TOAD,SVP?

    PRECISIONS: TOAD V.8,systeme client Win XP, Server unix,Base ORACLE 10g.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Points : 342
    Points
    342
    Par défaut
    Un bout de PL sans ";" , c'est louche.
    Un bout de PL avec une commande "abort transaction", c'est nouveau et je ne connais pas, mais je soupçonne que cela n'existe pas.

    Comme ton PL n'en est probablement pas, ton trigger se crée avec une erreur. Quand on crée une procédure, une fonction, un package ou un trigger, il faut jeter un oeil aux messages d'erreur transmis par oracle.

    Comme il se crée avec une erreur, quand tu essaye de l'executer, les programmeurs d'oracle on la grande gentillesse de t'envoyer un message disant :
    "votre trigger est invalide et n'a pas pu etre revalidé" (sous entendu, quand vous avez demander d'executer le pl invalide, j'ai essayé de le revalider et cela n'a pas marché).
    Evidement c'est en anglais.

    Dans la doc, on lit :
    ORA-04098: trigger 'string.string' is invalid and failed re-validation
    Cause: A trigger was attempted to be retrieved for execution and was found to be invalid. This also means that compilation/authorization failed for the trigger.
    Action: Options are to resolve the compilation/authorization errors, disable the trigger, or drop the trigger.
    En plus, si j'ai bien compris ce que vous souhaitez faire, il me semble plus judicieux d'envisager la création d'un index unique.

    En Oracle, on ne met pas "abort transaction" (sauf nouveauté ), on met rollback.
    Placer un rollback dans un trigger me semble bien aventureux, je ne sais même pas si c'est possible, je n'ai jamais essayé de le faire. Par contre, il est possible de lever une exception.

    Et dans tout ça, je ne vois pas le rapport avec toad... A moins que toad ne montre pas les erreurs quand il crée des triggers (ce dont je doute) et dans ce cas il faut vite le desinstaler !

  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
    Toad met bien les erreurs lors d'une compilation. Faut être dans le bon ecran pour compiler les procédures, trigger etc...(Procedure Editor)

    Je vois plein de bugs dans ce code :
    1/ Pas de ; après le END (facile jmguiche l'a dit)

    2/ L'appel à new et old se fait avec :new.colonne ou :old.colonne
    (Sauf le cas particulier de la condition when du trigger)

    3/ Du IF avec du SELECT ne fonctionne pas

    4/ Pas de lecture possible de la table sur laquelle le trigger repose (ORA-04091 MUTATING TABLE)

    5/ Jmguiche, je confirme : pas de commit/Rollback dans les triggers.
    Il faut utiliser un Raise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE trg_conso BEFORE INSERT ON dwh_conso_str
    REFERENCING NEW AS N 
    FOR EACH ROW
    BEGIN
          IF (N.ND IN (SELECT ND FROM dwh_conso_str)) THEN
          ABORT TRANSACTION
    END
    En plus, si j'ai bien compris ce que vous souhaitez faire, il me semble plus judicieux d'envisager la création d'un index unique.
    Tout à fait. Sauf si les données actuelles ne le permettent pas et qu'on veut bloquer les insertions suivantes.
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Il suffit de mettre un point virgule à la fin du code. C est tout.

    Enjoy toi!!!

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/08/2014, 10h50
  2. problème de l'execution d'un trigger
    Par rezguiinfo dans le forum SQL Procédural
    Réponses: 14
    Dernier message: 10/09/2012, 20h57
  3. Limiter l'execution d'un Trigger
    Par steph_v dans le forum Développement
    Réponses: 6
    Dernier message: 07/03/2010, 16h16
  4. Problème d'execution d'un trigger
    Par berceker united dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 25/06/2006, 04h22
  5. sql server: execution d'un programme depuis un trigger
    Par constantin dans le forum Développement
    Réponses: 3
    Dernier message: 04/10/2005, 19h20

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