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 :

[ORACLE8i] trigger crée avec erreurs de compilation?


Sujet :

Oracle

  1. #1
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut [ORACLE8i] trigger crée avec erreurs de compilation?
    SQL> CREATE or REPLACE TRIGGER TRG_RAT
    2 BEFORE INSERT
    3 ON etud_mod
    4 for EACH ROW
    5 BEGIN
    6 IF (:NEW.note_rat IS NOT NULL AND
    7 :NEW.cod_mod IN (select cod_mod from module
    8 where :NEW.cod_mod = module.cod_mod
    9 and module.atp = 'o'
    10 )
    11 AND 10 < GREATEST ( (:NEW.note1 + :NEW.note2 + :NEW.note_tp)/3 , (:NEW.note_syn + :NEW.note_
    tp)/2 )
    12 )
    13 THEN
    14 RAISE_APPLICATION_ERROR (-20010, 'moyenne déja > 10') ;
    15 END if ;
    16 END;
    17 /

    Attention: Déclencheur créé avec erreurs de compilation.

    où est le problème, y a t'il un moyen de trouver les erreurs de compilation

  2. #2
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Citation Envoyé par yostane
    où est le problème, y a t'il un moyen de trouver les erreurs de compilation
    voir la FAQ : afficher les erreurs de compilation

  3. #3
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut
    voici l'erreur

    PL/SQL: Statement ignored
    PLS-00405: sous-requête non autorisée dans ce contexte
    je ne comprends rien, un trigger peut comporter plusieurs tables où est le problème alors. Je suis vraiment bloqué, car l'nformation atp (si le module est a tp ou pas) se trouve dans une autre table et je dois l'utiliser pour calculer la moyenne et voir s'il elle est < 10

  4. #4
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Points : 674
    Points
    674
    Par défaut
    La clause WHEN ne peux pas contenir de sous-requete.

  5. #5
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    visiblement c'est la sous requete suivante qui pose problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select cod_mod from module
    where :NEW.cod_mod = module.cod_mod
    and module.atp = 'o'
    est ce que ce SELECT peut rendre plusieurs lignes?

    Si ce n'est pas le cas affecte le résultat à une variable (select into) et fait ta comparaison avec la variable... (:NEW.cod_mod = ma_variable). Mais cela va lancer une exception non gérée si il n'y a pas de ligne à ramener de la table module.

    Si c'est le cas tu peux essayer de créer une fonction rendant un booleen indiquant si oui ou on le :nex.cod_mod est trouvable dans la table module.
    Tu peux aussi essayer avec la syntaxe EXISTS peut être que ca marchera mieux que le IN.

    Je ne me souvient pas avoir déjà vu de test IF ou l'on vérifie l'appartenance au résultat d'un select (IF .. IN (SELECT...). (Ce qui ne veut pas dire que ca ne doit pas marcher mais ca n'est pas garanti).

  6. #6
    Membre régulier Avatar de yostane
    Homme Profil pro
    test
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : test

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 106
    Points
    106
    Par défaut
    Y a t'il pas un meilleur moyen pour exprimer cette contrainte, sinon je me débrouiller autrement puisque l'interface d'accés est avec DELPHI7.
    Qu'en pensez-vous.

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/03/2009, 22h12
  2. Réponses: 4
    Dernier message: 03/09/2008, 01h44
  3. Déclencheur créé avec erreurs de compilation.
    Par mehdiyou dans le forum SQL
    Réponses: 6
    Dernier message: 16/04/2008, 12h39
  4. [FreePascal]Erreur de compilation avec Dev-Pascal
    Par youngeikichi dans le forum Free Pascal
    Réponses: 3
    Dernier message: 17/02/2005, 14h22
  5. Api mysql avec Devc++, erreur de compilation
    Par Viiince dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 15/06/2004, 17h19

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